当前位置: 首页 > 知识库问答 >
问题:

Android10:如何在文件系统上以编程方式删除纵隔项及其相关数据?

燕博文
2023-03-14

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

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

我之前删除文件的操作:

  1. mediastore.mediaColumns.data
  2. 获取路径
  3. 使用了新文件(路径)。delete()删除该文件
  4. 手动更新纵隔

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

例如,我有项目的uri:content:/media/external/images/media/502(它的有效uri,我用网格显示它的缩略图)。不管我是在纵隔还是其他应用程序中插入了这个项目。

我使用context.getContentResolver().delete(uri,null,null)。它要么成功删除(返回1行),要么捕获RecoverableSecurityException以使用StartIntentSenderForResult()访问当前uri,然后使用相同的GetContentResolver().delete()OnActivityResult()中删除它,然后成功删除。

不管是哪种方式,该项目被从纵隔删除,并且在我查询纵隔图像时,也不显示在结果中,也不显示在其他应用程序中。

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

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

例如:我的谷歌Pixel和谷歌Pixel 3A XL上的Android 10在图像/视频/音频上的表现就像上面描述的那样,但小米Mi A2 Lite上的Android 9只在音频文件上的表现就像这样,而删除图像/视频则很好。

我在清单中有android:requestlegacyExternalStorage=“false”

有没有一种方法可以强制纵隔删除文件系统上的数据?为什么文件系统上的文件会被留下?

共有1个答案

陆文博
2023-03-14

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

我通常会添加几个检查,如果一个文件真的在Android Q上被删除了,在用户不手动确认每个文件的情况下,也不可能删除整个相册。这使得删除设备上的文件对我来说不感兴趣

 类似资料:
  • 问题内容: 我在4.4.2上,尝试通过uri删除文件(图像)。这是我的代码: 目前,这些删除功能均未真正删除文件。我的AndroidManifest.xml中也有此代码: 问题答案: 您为什么不使用以下代码对此进行测试: 我认为问题的一部分是您永远不要尝试删除文件,而只是创建一个具有方法调用的变量。 因此,在您的情况下,您可以尝试: 但是我认为这有点过分。 您添加了一条注释,说明您正在使用外部目录

  • 问题内容: 我正在用C ++写一个基准测试工具,我想在两次实验之间清除文件系统内存缓存。我知道以下控制台命令: 我的问题是如何直接在C ++中以编程方式执行此操作? 任何帮助表示赞赏! 问题答案: 只需写:

  • 本文向大家介绍Python彻底删除文件夹及其子文件方式,包括了Python彻底删除文件夹及其子文件方式的使用技巧和注意事项,需要的朋友参考一下 我就废话不多说了,直接上代码吧! 以上这篇Python彻底删除文件夹及其子文件方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 我试着把https://developers.google.com/sheets/api/samples/conditional-formatting的两个例子结合起来 读取所有条件格式 删除需要删除索引,但这不会在读取API响应中返回。我尝试假设数组中返回格式的索引是合适的,但是在操作中间遇到了一个错误“在索引中没有条件格式”,在它们全部删除之前。 这是我想弄清楚的表格的副本:https://d

  • 问题内容: 类似于此问题,但适用于MySQL。 我如何以编程方式确定MySQL中的外键引用(假设InnoDB)?我几乎可以通过以下方式获得它们: …但是可惜,似乎包含某些信息的评论列被截断了,所以我不能依靠它。一定有其他方法… 我对C API调用,SQL语句或其他任何东西都感到满意-我只需要一贯工作的东西。 注意:我也考虑过解析“ SHOW CREATE TABLE MyTableName”语句的

  • 出于某种原因,我的回答只给出了空的方括号,即[],什么都没有发生。 这是我的代码: 更新:根据John的建议,我尝试创建一个测试桶,但不幸的是,我收到了一个权限拒绝错误。所以我做了以下操作: 在我有权访问的bucket下创建了一个名为“test”的文件夹 这次我确实收到了一个ResponseMetadata对象,而不是空括号。然而,我仍然感到困惑。我的HTTPStatusCode是200。但当它告