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

Android 11与Windows互传文件的创建、读取及访问问题求解

Android 11 跨设备文件交互适配方案

问题1:外置SD卡自定义目录下CDG文件无法读取

Android 11 开始强制启用分区存储机制,默认仅允许应用访问自身专属目录,以及公共媒体库内的标准格式媒体文件:

  • MP3属于系统可识别的标准音频格式,会被纳入媒体库Audio分类,应用申请READ_EXTERNAL_STORAGE权限后可直接访问
  • CDG属于非标准自定义格式,未被纳入系统默认媒体分类,因此无法通过常规存储权限读取

最优解决方案

引导用户通过系统文件选择器授权目标目录的持久访问权限,无需申请敏感存储权限,适配成本低且符合Google Play上架规范:

  1. 调用ACTION_OPEN_DOCUMENT_TREE Intent,引导用户手动选择外置SD卡下的Karaoke目录
  2. 在onActivityResult回调中获取返回的目录Uri,调用getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION)申请持久化访问权限,避免应用重启后权限失效
  3. 后续所有对该目录下CDG、MP3文件的读写操作均通过该Uri执行,无需额外权限

备选方案

若你的应用有合理的全文件访问场景,可在AndroidManifest中声明MANAGE_EXTERNAL_STORAGE权限,引导用户开启「所有文件访问权限」后即可读取任意格式的公共存储文件,注意Google Play上架时需要提交该权限的使用说明,否则会被拒审。

问题2:应用数据库备份到可移除SD卡失效

Android 11 对可移除SD卡的公共目录写入做了限制,应用无法直接在SD卡根目录或自定义公共目录下创建、写入备份文件。

最优解决方案

使用可移除SD卡下的应用专属目录存储备份文件,无需申请任何权限:

  1. 调用context.getExternalFilesDirs(null)获取存储路径数组,数组中第二个及之后的条目对应外置SD卡的应用专属目录
  2. 将数据库备份文件写入该目录下,用户通过MTP连接Windows后,可直接在SD卡的Android/data/[你的应用包名]/files/路径下找到备份文件,手动拷贝到Windows即可

备选方案

若需要让用户自行选择备份文件的存储位置(无需进入应用专属目录查找),可调用ACTION_CREATE_DOCUMENT Intent,引导用户手动选择备份文件的保存路径(支持选择SD卡任意目录,也可直接导出到已连接的Windows设备),拿到返回的Uri后将数据库内容写入该Uri即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:45:04