我正在尝试在我的应用程序上实现垃圾箱功能, 它可以让用户通过这个应用程序删除/恢复文件。
所以我写了这样的东西,通过 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" />
出现此对话框后,单击“允许”
对于设备上的那些文件,它工作得很好。设备上的项目已重命名为
.trashed_<expire_timestamp>_<original_Filename>
,MediaStore IS_TRASHED 列也已标记为 1。MediaStore 生成增加。
但是,对于那些在 SD 卡中认为系统对话框出现的人,单击允许不会改变任何内容。 SD卡中的文件名仍然相同,MediaStore记录IS_TRASHED仍然为0, 并且没有抛出任何异常。 但是 MediaStore 生成确实增加了,看起来很奇怪......
有什么我错过的吗?
要将 SD 卡上的项目移至垃圾箱,您需要正确的 URI
URI
content://media/external/images/media/1234
指的是“external_primary”存储。content://media/5216-4f19/images/media/1234
。