小编art*_*man的帖子

Android 10:如何以编程方式删除文件系统上的 MediaStore 项目及其关联数据?

我正在更新我的应用以使用 Android 10 中引入的 Scoped Storage 功能。

我的应用程序与 MediaStore 一起使用并显示图像、视频和音频文件,并为用户提供删除项目的能力。

我之前删除文件的操作:

  1. 得到了路径 MediaStore.MediaColumns.DATA
  2. 用于new File(path).delete()删除该文件
  3. 手动更新 MediaStore

现在 MediaStore.MediaColumns.DATA 不可用,我迁移到使用ContentResolver.delete()从 MediaStore 删除项目

例如,我有项目的 uri:(content://media/external/images/media/502它的有效 uri,我在网格中显示它的缩略图)。我是否在 MediaStore 或其他一些应用程序中插入了这个项目都没有关系。

我用context.getContentResolver().delete(uri, null, null). 它要么成功删除(返回 1 行),要么捕获RecoverableSecurityException用于startIntentSenderForResult()访问当前 uri,然后使用相同的内容getContentResolver().delete()将其删除onActivityResult()然后成功删除。

无论哪种方式,该项目都会从 MediaStore 中删除,并且在我查询 MediaStore 以获取图像时也不会在结果中显示,也不会在其他应用程序中显示。

但是此文件存在于文件系统中(使用 SAF 和各种文件管理器(Google Files、Total Commander)进行检查)

有时(取决于 Android 版本和媒体类型)这些项目会在手机重启后(或打开 Google 相册后 - 它扫描文件系统)带回 MediaStore

例如:我的 Google Pixel 和 Google Pixel …

android mediastore scoped-storage

9
推荐指数
3
解决办法
5679
查看次数

标签 统计

android ×1

mediastore ×1

scoped-storage ×1