我正在更新我的应用以使用 Android 10 中引入的 Scoped Storage 功能。
我的应用程序与 MediaStore 一起使用并显示图像、视频和音频文件,并为用户提供删除项目的能力。
我之前删除文件的操作:
MediaStore.MediaColumns.DATA
new File(path).delete()
删除该文件现在 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 …