当前位置: 首页 > 知识库问答 >
问题:

我们可以使用MediaStore API删除一个图像文件吗?如果是,那怎么做

伏建修
2023-03-14
private void deleteTheFile(String path) {
    File fdelete = new File(path);
    if (fdelete.exists()) {
        if (fdelete.delete()) {
            getApplicationContext().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(path))));
            Log.i(TAG, "deleteTheFile: file deleted");
        } else {
            Log.i(TAG, "deleteTheFile: file not dellleeettteeeddd");
        }
    }

但是谷歌拒绝了我的更新,说

问题:需要使用媒体存储API

您已经请求访问所有文件访问权限,但似乎您的应用程序的核心功能只要求访问媒体文件。使用MediaStore API,应用程序可以贡献和访问外部存储卷上可用的媒体,而不需要访问所有文件权限。

但是我以前从来没有使用过媒体商店API,我不知道它能用它删除图像文件,因为删除文件属于可写部分

共有1个答案

穆轶
2023-03-14

使用CreateDeleteRequest

private fun deleteImages(uris: List<Uri>) {
  val pendingIntent = MediaStore.createDeleteRequest(contentResolver, uris.filter {
    checkUriPermission(it, Binder.getCallingPid(), Binder.getCallingUid(), Intent.FLAG_GRANT_WRITE_URI_PERMISSION) != PackageManager.PERMISSION_GRANTED
  })
  startIntentSenderForResult(pendingIntent.intentSender, REQ_CODE, null, 0, 0, 0)
}

使用contentResolver

// Remove a specific media item.
val resolver = applicationContext.contentResolver

// URI of the image to remove.
val imageUri = "..."

// WHERE clause.
val selection = "..."
val selectionArgs = "..."

// Perform the actual removal.
val numImagesRemoved = resolver.delete(
        imageUri,
        selection,
        selectionArgs)

https://github.com/android/storage-samples/tree/main/meniastore

 类似资料: