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

cordova.file.externalRootDirectory在Android11设备失效无法下载文件如何解决

Cordova Android 11 文件下载失败解决方案

核心问题原因

Android 11(API 30)强制启用分区存储规则,第三方应用默认无法直接读写外部存储根目录,你代码中使用的cordova.file.externalRootDirectory就是外部存储根路径,这是Android 11下运行失败的核心原因。

需要调整的内容

1. 修改文件存储路径

优先选用以下两类合规路径,无需额外申请存储权限即可正常读写:

  • 应用专属外部存储路径:cordova.file.externalDataDirectory,仅本应用可访问,卸载应用时文件会同步删除
  • 公共分类存储路径:如果需要文件可被其他应用(如PDF阅读器)访问,使用对应分类的公共目录,例如下载PDF可使用cordova.file.externalPublicDirectory + 'Download/'

路径修改后的代码示例:

// 示例:存储到公共下载目录
window.resolveLocalFileSystemURL(cordova.file.externalPublicDirectory + 'Download/', function(dir) {
    dir.getFile("test.pdf", {create:true}, function(file) {
        file.createWriter(function(fileWriter) {
            fileWriter.write("byteArrays data");
            alert('Message', 'File Downloaded Successfully');
        }, function(){
            alert('Error!', "Unable to save the file");
        });
    },function(e){
        alert('Error!', e);
    });
},function(e){
    console.log(e);
});

2. 调整权限配置

  • WRITE_EXTERNAL_STORAGE权限在API 30及以上版本已经完全失效,可以直接删除
  • MANAGE_EXTERNAL_STORAGE属于特殊权限,仅文件管理器类应用可申请谷歌商店过审,非必要不建议使用。如果必须全局访问外部存储,除了在AndroidManifest.xml中声明,还需要动态引导用户手动开启权限:
if (parseInt(device.version) >= 11) {
  cordova.plugins.permissions.checkPermission(cordova.plugins.permissions.MANAGE_EXTERNAL_STORAGE, function(status) {
    if (!status.hasPermission) {
      cordova.plugins.intent.startActivity({
        action: 'android.settings.MANAGE_APP_ALL_FILES_ACCESS_PERMISSION',
        uri: 'package:' + cordova.getAppId()
      }, function() {}, function() {});
    }
  });
}

上述代码需要提前安装cordova-plugin-permissions和cordova-plugin-intent插件。

3. 替换废弃插件

你使用的cordova-plugin-file-transfer已经被官方停止维护,对API 30+适配性极差,建议替换为原生XMLHttpRequest或fetch API实现下载逻辑,配合cordova-plugin-file完成本地文件写入,兼容性更好。

4. 补充Config.xml配置

在现有配置基础上添加AndroidX适配开关:

<preference name="AndroidXEnabled" value="true" />

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:15:04