You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 7下跨应用访问SD卡存储的权限问题咨询

问题解答

你看到的弹窗对应的权限

这个弹窗是Android 7里存储访问框架(SAF) 触发的目录级手动授权,它不属于WRITE_EXTERNAL_STORAGE这类普通危险权限,是系统为了让App能访问沙箱外特定目录(比如其他App的私有外部存储)而设计的用户手动授权机制。

为什么WRITE_EXTERNAL_STORAGE不管用

在Android 7(API 24)的沙箱规则里:

  • WRITE_EXTERNAL_STORAGE仅允许App访问公共存储目录(比如Downloads、Pictures)和自身的私有外部存储(/storage/sdcard/Android/data/com.test.appA/)。
  • 其他App的私有外部存储目录(/storage/sdcard/Android/data/com.test.appB/)属于受保护的私有空间,哪怕持有WRITE_EXTERNAL_STORAGE权限也无法直接访问,这是系统为保障App数据安全设置的限制。

文件管理器能访问的原因

文件管理器是通过调用SAF相关Intent(比如ACTION_OPEN_DOCUMENT_TREE)触发这个弹窗,让用户手动选择要访问的目录,用户确认授权后,文件管理器就获得了该目录的读写权限,因此能操作其他App的私有存储目录。

你的场景解决方案

如果要实现App A将文件移动到App B的对应目录,有两种可行方案:

  • 方案1:让App B提供ContentProvider接口,App A通过该接口将文件传入App B的私有目录,这种方式无需用户额外授权,符合Android沙箱规范。
  • 方案2:借助SAF让用户手动授权App A访问App B的目标目录:
    1. 启动ACTION_OPEN_DOCUMENT_TREE Intent,引导用户找到并选择/storage/sdcard/Android/data/com.test.appB/files目录。
    2. 通过takePersistableUriPermission方法保存授权,后续即可通过Uri操作该目录下的文件。

内容的提问来源于stack exchange,提问作者user22506935

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 08:12:20