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

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

我正在更新我的应用程序以使用Android 10中引入的范围存储功能。

我的应用程序可与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()中,而then

则成功删除。

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

BUT

此文件存在于文件系统上(已使用SAF和各种文件管理器(Google Files,Total Commander)进行了检查)

有时(取决于Android版本和媒体类型),这些项目是在电话重启后重新带回MediaStore

(或在打开Goog​​le Photos后-它会扫描文件系统)

例如:我的Google Pixel和Google Pixel 3a XL上的Android 10的行为与上述针对图像/视频/音频的行为相同,但是小米Mi A2 Lite上的Android 9的行为仅与音频文件相同,而删除了图像/视频则正常。

清单中有android:requestLegacyExternalStorage="false"

是否有一种方法也可以强制MediaStore删除文件系统上的数据?为什么文件系统上的文件被遗忘了?

我正在更新我的应用程序以使用Android 10中引入的范围存储功能。我的应用程序可与MediaStore一起使用并显示图像,视频和音频文件,并为用户提供了删除项目的功能。 ...

android mediastore scoped-storage
1个回答
0
投票

根据我的观察,没有强制删除。

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