使用 ImagePath 从 InternalStorage 中删除图像

Delete a image from InternalStorage using ImagePath

我正在使用 Android 版本 10。 我已启用读取和写入存储的权限 设备名称:Poco F1

场景:我必须捕获当前布局的屏幕截图并将其保存到 internalStorage 并向用户预览该图像。在这里用户可以选择删除图像。

这是我用来保存和删除的代码

保存截图:

//I will pass the bitmap here
fun saveBitmapToInternalStorage(bitmap: Bitmap?) {
    bitmap?.let {

        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
            saveBitmapToOlderDevice(it)
        } else {

            saveBitmapToNewerDevice(it)
        }
    }
}





//This method is to save image to newerdevice >= Q
@RequiresApi(Build.VERSION_CODES.Q)
private fun saveBitmapToNewerDevice(bitmap: Bitmap) {
    val uri = generateUri()
    context.contentResolver.openOutputStream(uri ?: return).use { outputStream ->
        outputStream?.let {
            writeBitmapToJpeg(bitmap, outputStream, uri.toString())
        }
    }
}





//This is to generate the URI.
@RequiresApi(Build.VERSION_CODES.Q)
private fun generateUri(): Uri? {
    val dateFormat = getDateFormat()
    val contentValues = ContentValues().apply {
        put(MediaStore.MediaColumns.DISPLAY_NAME, "${dateFormat}.jpg")
        put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg")
        put(MediaStore.MediaColumns.RELATIVE_PATH, "Pictures/${context.resources.getString(R.string.app_name)}")
    }
    return context.contentResolver.insert(
        MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
        contentValues
    )
}





// To save images to olderDevice
private fun saveBitmapToOlderDevice(bmp: Bitmap) {
    val filename = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)?.absolutePath +
            "/${context.resources.getString(R.string.app_name)}/${getDateFormat()}.jpg"
    createDirectory(filename)
    val outputStream = FileOutputStream(filename)

    writeBitmapToJpeg(bmp, outputStream, filename)
}





//This method is to save the image to InternalStorage
private fun writeBitmapToJpeg(bmp: Bitmap, outputStream: OutputStream, imagePath: String) {
    try {
        val outputData = ByteArrayOutputStream()

        bmp.compress(CompressFormat.JPEG, 100, outputData)
        outputData.writeTo(outputStream)

        outputStream.flush()
        outputStream.close()

    } catch (e: IOException) {
        showBitmapWriteErrorMessage()
    }
}

我把图片存入internalStorgae时保存了路径 路径看起来像

/storage/emulated/0/Pictures/TGP AR/20211011142001.jpg 我将这条路径传递给下面的方法

删除图片:

private fun deleteImage(imagePath: String) {
    val file = File(imagePath)
    file.delete()
}

file.exists() 正在返回 true。 file.delete() 返回 false。

我认为,可能有两种不同的删除方式 ( > & < Q )。 请帮助我

您可以通过将您的方法修改为以下内容来删除图像:

private fun deleteImage(imagePath: Uri) { 
    getContentResolver().delete(imagePath, null, null)
}

然后通过generateUri()创建的Uri删除文件