使用Cordova文件插件创建Android项目目录失败问题求助
Cordova 文件插件创建目录失败的核心问题
- 前置依赖安装不完整:如果项目没有正确安装配置
cordova-plugin-file插件,会导致cordova.file全局对象不存在,访问externalRootDirectory属性时直接抛出空引用错误,后续的目录创建流程完全无法执行。 - 代码执行时机不满足要求:当前代码直接在脚本加载阶段执行
writeFile(),但Cordova文件插件的所有API(包括cordova.file全局变量、window.resolveLocalFileSystemURL方法)必须等待deviceready事件触发完成初始化后才能调用,提前执行会因为API未就绪出现静默失败,甚至无法正常触发错误回调。 - 未适配Android动态存储权限:
cordova.file.externalRootDirectory对应用是外部公共存储根目录,从Android 6.0(API 23)开始,读写外部存储属于危险权限,仅在清单文件静态声明权限无法生效,必须在运行时向用户申请授权,未授权状态下系统会直接拦截目录创建请求。 - 未适配高版本Android的分区存储规则:从Android 10(API 29)开始,应用默认启用分区存储模式,没有适配的应用无法直接在外部存储根目录创建自定义命名的目录。即使获取了存储权限,也会被系统拒绝创建操作。需要在AndroidManifest的application节点添加
android:requestLegacyExternalStorage="true"属性,强制应用使用旧版存储逻辑才能正常访问根目录;Android 11及以上版本还需要额外申请所有文件访问权限。 - 错误回调缺失核心排查信息:三个错误处理函数均没有接收、打印传入的错误对象:
onError仅弹出固定提示"onError",没有输出错误码、错误描述onGetDirectoryFail把错误对象直接当目录对象打印,完全没有读取失败的具体原因,出现问题时无法定位根因
- 冗余的无意义赋值:代码中
var entry = ""; entry = fileSystem;属于多余逻辑,window.resolveLocalFileSystemURL返回的fileSystem本身就是指向外部存储根目录的DirectoryEntry对象,可直接调用getDirectory方法,这层无效赋值虽然不会直接导致报错,但说明对API返回对象的类型没有明确认知。
内容的提问来源于stack exchange,提问作者kosbou
相关产品推荐
相关产品推荐

