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

Cordova在Android设备SD卡读写及目录创建问题求助

解决Cordova在Android 6.0+上SD卡根目录无法创建文件夹的问题

我完全理解你折腾了好几个小时的挫败感——Android 6.0之后的存储权限模型确实给Cordova开发者挖了不少坑,尤其是外部SD卡的访问限制。咱们一步步拆解问题和解决方案:

问题根源:Android存储权限的核心变化

从Android 6.0(API 23)开始,Google对外部存储的访问做了严格限制:

  • cordova.file.externalRootFolder指向file:///storage/emulated/0是正常的,因为它对应Android原生的Environment.getExternalStorageDirectory()API,这个路径本来就指向内置存储的公共目录,而非外部SD卡。
  • 即使你拿到了外部SD卡的根目录路径(比如file:///storage/7EC0-0CEC/),第三方应用也没有直接写入的权限——这是Android为了保护用户数据安全、规范存储布局的强制限制,哪怕你申请了WRITE_EXTERNAL_STORAGE权限也没用,这个权限只能让你访问内置存储和SD卡上的媒体文件。

为什么Android/data/{app-name}/files/可以正常操作?

这个路径对应Cordova的cordova.file.externalDataDirectory,它是应用在外部SD卡上的私有沙箱目录:

  • Android系统默认允许应用读写自己的私有沙箱目录,不需要额外申请存储权限(在Android 10+甚至连READ_EXTERNAL_STORAGE/WRITE_EXTERNAL_STORAGE都不需要)。
  • 这是官方推荐的应用外部存储路径,应用卸载时该目录会被自动清理,不会留下垃圾文件,稳定性和合规性都拉满。

如果必须访问SD卡根目录怎么办?

如果你的业务场景确实需要在SD卡根目录创建文件夹或文件,只能通过以下方式,但要注意风险:

  1. 申请敏感权限MANAGE_EXTERNAL_STORAGE:
    • 在项目的AndroidManifest.xml中添加权限声明:
      <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
      
    • 这个权限无法通过常规的运行时权限弹窗获取,必须引导用户跳转到系统设置页面手动开启。你可以借助Cordova的权限插件实现跳转逻辑。
  2. 注意上架风险:
    Google Play对使用MANAGE_EXTERNAL_STORAGE权限的应用审核非常严格,只有文件管理器、备份工具、媒体编辑类等确实需要全局访问存储的应用才会被通过,普通应用大概率会被拒审。

总结

除非你的应用有不可替代的全局存储需求,否则强烈建议优先使用cordova.file.externalDataDirectory对应的Android/data/{app-name}/files/路径,这是最省心、最合规的解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:28:15