访问下载文件夹中另一个应用程序的文件 - Android 10+

Posted

技术标签:

【中文标题】访问下载文件夹中另一个应用程序的文件 - Android 10+【英文标题】:Access files of another App inside the Download folder - Android 10+ 【发布时间】:2021-12-04 17:32:12 【问题描述】:

试图弄清这种完全混乱的范围存储。

所以我将 App A 生成的一些文件(日志)存储在 Download 文件夹中。

我正在使用 Mediastore/ContentResolver,只要它来自 App A,读取或写入访问都没有问题。

但是应用 B 需要读取这些文件,问题就来了。 使用 Mediastore/ContentResolver 的方式相同,但这些文件似乎对查询不可见。

下载应该是共享存储,但文件确实生成为 -rw-rw--- 这意味着其他人没有权限,这可以解释为什么 App B 看不到来自 App A 的文件,如果它们不在同一组。

存储访问框架方法可以解决这个问题吗? Thi 还没有尝试过,因为弹出系统窗口绝对不是我想要的应用程序的用户体验。

谢谢。

【问题讨论】:

【参考方案1】:

如果第二个应用通过 MANAGE_EXTERNAL_STORAGE 具有“所有文件访问权限”,它也可以列出第一个应用的文件。

否则,您可以让第二个应用的用户使用存储访问框架的 ACTION_OPEN_DOCUMENT 选择那些文件。

您最好将文件存储在子目录中,因为第二个应用程序可以使用 ACTION_OPEN_DOCUMENT_TREE 选择完整目录并列出所有文件。

【讨论】:

我相信 MANAGE_EXTERNAL_STORAGE 现在在提交到 playstore 时是合理的,在我的情况下我认为这应该很困难,我真的不需要访问这些文件的所有存储。所有文件都存储在下载文件夹内的子文件夹下。所以 SAF 应该是这种方式......试图避免它我认为它真的破坏了简单性和用户体验......谢谢。 如果你想在没有用户交互的情况下完成所有应用程序,甚至可以将其文件存储在 getExternalFilesDir() 或 getFilesDir() 中,并扩展 ContentProvider 以让应用程序列出两个文件并读取它们。

以上是关于访问下载文件夹中另一个应用程序的文件 - Android 10+的主要内容,如果未能解决你的问题,请参考以下文章

通过 React 中另一个文件夹中的页面访问文件夹中的本地图像

如何访问 symfony2 中另一个 html.twig 文件中的 javascript 函数?

你将如何从 Qt 中另一个文件中的函数访问小部件?

如何使用 Spring Boot 应用程序中另一个属性文件中的值解析属性文件中的占位符

使用该文件中另一个文件中的函数的 Argparse

Linux中另一个进程的重复文件描述符(没有sendmsg)