Android10+下载目录下其他应用生成文件的访问问题(分区存储相关)
分区存储公共目录跨App访问问题解决方案
你遇到的查询不到文件的问题是Android分区存储的标准限制:
- 公共共享目录的媒体/文件条目默认仅对创建它的App可见,非创建方App即便通过
MediaStore/ContentResolver接口查询,系统也会自动过滤掉不属于当前App的条目 - 你观察到的
-rw-rw---权限只是底层Linux权限的表现,并非问题的核心触发原因
SAF方案可行性
Storage Access Framework确实可以规避这个权限问题,有两种使用场景:
- 单次文件访问:调用系统选择器让用户选中目标日志文件,你拿到返回的Uri后会自动获得该文件的临时读写权限,无需额外申请存储权限,但首次访问必须弹出系统选择窗口,无法跳过
- 目录持久授权:引导用户主动给Download根目录授予访问权限,授权完成后App B可以在后续任意时候访问该目录下的所有文件,不需要重复弹窗,但首次授权仍然需要弹出系统级授权窗口,且Android 13及以上系统对该类全目录授权的引导流程做了严格限制,部分厂商系统可能会额外拦截
无弹窗替代方案
如果你无法接受SAF的弹窗体验,可以根据你的实际场景选择以下方案:
- 若App A和App B均为你方开发的应用:可通过
ContentProvider或FileProvider配置文件共享规则,跨App传递文件Uri时附带FLAG_GRANT_READ_URI_PERMISSION标记,即可实现无弹窗授权访问 - 若你的应用兼容目标为Android 12及以下:可申请
READ_EXTERNAL_STORAGE权限,拿到权限后即可查询到其他App在公共目录下创建的非媒体类文件 - 若两个App使用相同签名打包:可配置
sharedUserId让两个应用共享Linux用户组,直接互相访问私有数据目录,无需通过公共存储传递日志文件
内容的提问来源于stack exchange,提问作者MakoShark2
相关产品推荐
相关产品推荐

