我正在更新我的应用程序以使用Android 10中引入的范围存储功能。
我的应用程序可与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()
中,而then
无论哪种方式,从MediaStore中删除该项目,并且在查询MediaStore中的图像时,或者在其他应用程序中都不会在结果中显示该项目。
BUT
此文件存在于文件系统上(已使用SAF和各种文件管理器(Google Files,Total Commander)进行了检查)有时(取决于Android版本和媒体类型),这些项目是在电话重启后重新带回MediaStore
(或在打开Google Photos后-它会扫描文件系统)例如:我的Google Pixel和Google Pixel 3a XL上的Android 10的行为与上述针对图像/视频/音频的行为相同,但是小米Mi A2 Lite上的Android 9的行为仅与音频文件相同,而删除了图像/视频则正常。
清单中有android:requestLegacyExternalStorage="false"
。
是否有一种方法也可以强制MediaStore删除文件系统上的数据?为什么文件系统上的文件被遗忘了?
我正在更新我的应用程序以使用Android 10中引入的范围存储功能。我的应用程序可与MediaStore一起使用并显示图像,视频和音频文件,并为用户提供了删除项目的功能。 ...
根据我的观察,没有强制删除。