如何通过 MediaStore#createTrashRequest 删除 SD 卡上的图像?

问题描述 投票:0回答:1

我正在尝试在我的应用程序上实现垃圾箱功能, 它可以让用户通过这个应用程序删除/恢复文件。

所以我写了这样的东西,通过 MediaStore#createTrashRequest 创建垃圾意图,使用 ActivityResultLauncher 启动:

val launcher = registerForActivityResult(ActivityResultContracts.StartIntentSenderForResult()) {
  // ...
}

// this uri from cursor query, hard code here just for the example
val uri = Uri.parse("content://media/external/images/media/1234") 

val deleteIntent = MediaStore.createTrashRequest(contentResolver, listOf(uri), true)

launcher.launch(
    IntentSenderRequest.Builder(deleteIntent.intentSender).build()
)

这是我的 AndroidManifest 权限:

<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
    android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_MEDIA" />

出现此对话框后,单击“允许”

Android 11 MediaStore op Dialog

对于设备上的那些文件,它工作得很好。设备上的项目已重命名为

.trashed_<expire_timestamp>_<original_Filename>
,MediaStore IS_TRASHED 列也已标记为 1。MediaStore 生成增加。

但是,对于那些在 SD 卡中认为系统对话框出现的人,单击允许不会改变任何内容。 SD卡中的文件名仍然相同,MediaStore记录IS_TRASHED仍然为0, 并且没有抛出任何异常。 但是 MediaStore 生成确实增加了,看起来很奇怪......

有什么我错过的吗?

android android-contentprovider android-sdcard mediastore
1个回答
0
投票

要将 SD 卡上的项目移至垃圾箱,您需要正确的 URI

URI

content://media/external/images/media/1234
指的是“external_primary”存储。
对于 SD 卡上的项目,URI 应对应于特定的卷 ID,例如:
content://media/5216-4f19/images/media/1234

© www.soinside.com 2019 - 2024. All rights reserved.