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

Android11 Scoped Storage下targetSdk=30无MANAGE_EXTERNAL_STORAGE如何存非媒体文件到Documents/Download

问题解答

在targetSdk=30及以上版本的Android系统中,不申请MANAGE_EXTERNAL_STORAGE权限,完全可以将非媒体文件保存到系统公共/Documents或/Download目录。

先澄清你提到的目录歧义:

文档中提到的两类/Documents//Download目录区别如下:

  1. 应用专属目录下的对应文件夹:路径为/sdcard/Android/data/[应用包名]/files/Documents,不需要任何权限即可读写,但应用卸载时数据会同步删除,普通用户很难在系统文件管理器中直接访问到该路径下的文件
  2. 系统公共共享目录:即你要实现的根目录下的/Documents、/Download,所有应用都可以通过官方提供的存储访问框架访问,文件不会随应用卸载删除,用户可以直接在系统文件管理器中查看

具体实现方案

用Android系统原生提供的存储访问框架(Storage Access Framework, SAF) 即可实现,全程不需要申请任何读写存储权限,也符合Google Play的上架规范:

场景1:用户主动触发单次文件导出(比如用户点击「导出数据」按钮)

  • 构造ACTION_CREATE_DOCUMENT类型的Intent,指定你要保存的非媒体文件的MIME类型、默认文件名
  • 拉起系统原生文件选择器,用户可以自主选择保存到/Documents、/Download或者其他任意自定义路径
  • 用户确认保存路径后,你会拿到对应文件的Uri,通过ContentResolver打开输出流写入数据即可

场景2:需要批量写入多个非媒体文件,无需每次都让用户选择路径

  • 构造ACTION_OPEN_DOCUMENT_TREE类型的Intent,让用户主动授权你访问指定目录(用户可以直接选择/Documents或者/Download根目录/子目录)
  • 拿到目录授权Uri之后可以持久化该权限,后续不需要重复申请,就能直接在该授权目录下创建、修改、删除你自己生成的非媒体文件

注意事项

  • 你只能访问、修改你自己通过SAF在公共目录下创建的文件,其他应用生成的非媒体文件你无法直接读取,除非用户主动通过SAF选择对应文件授权你访问
  • 部分系统版本对APK、EXE等可执行文件写入公共目录有额外限制,这类特殊文件需要单独适配
  • 不需要用户感知文件存储位置的场景,优先使用应用专属目录存储,只有需要用户可以直接找到、卸载应用不删除的非媒体文件才用SAF方案写入公共目录

存储权限适配规则示意图

内容的提问来源于stack exchange,提问作者A. M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 04:45:03