Cordova Android10读取录音文件触发FileError NOT_FOUND_ERR问题
Android 10 下 Cordova 音频录制后文件读取报错排查
报错根因
该问题的核心触发原因是Android 10 引入的分区存储(Scoped Storage)机制与当前使用的cordova-android版本适配缺口,和手动授权的存储权限没有直接关联。
问题匹配特征
- 完全对应你当前的依赖版本栈:
cordova@10.0.0cordova-android@9.0.0cordova-plugin-media-capture@3.0.3cordova-plugin-file@6.0.2
- 系统录音机是独立应用,录制完成的文件默认存储在自身的专属外部存储目录下。按照Android 10的分区存储规则,普通应用就算声明了
READ_EXTERNAL_STORAGE权限,也无法直接访问其他应用专属目录下的文件——这也是为什么日志显示文件存在、权限已授予,实际通过FileReader读取时还是抛出路径找不到错误的原因。 - 你重置开发环境后复现故障,是因为新搭建的环境默认启用了Android 10+的分区存储强制规则,之前能正常运行的旧环境,大概率是手动关闭了该规则做兼容。
可直接落地的修复方案
- 临时快速验证:在
config.xml的Android平台配置块中,添加强制启用传统外部存储访问模式的配置:
重新打包安装后,应用会回退到Android 9及之前的全量外部存储访问逻辑,即可正常读取系统录音机生成的音频文件。<preference name="AndroidPersistentFileLocation" value="Compatibility" /> <preference name="android:requestLegacyExternalStorage" value="true" /> - 长期合规适配:拿到
captureAudio返回的MediaFile对象后,不要直接拼接绝对路径去读取,先通过File插件提供的resolveLocalFileSystemURL方法解析得到应用可访问的FileEntry句柄,再交由FileReader做读取操作,避免跨应用路径的权限校验失败。 - 注意:如果后续目标适配版本升级到Android 11及以上,
requestLegacyExternalStorage属性会完全失效,此时必须适配分区存储规则,通过系统媒体库API查询对应音频文件的可访问URI,不能直接操作文件绝对路径。
内容的提问来源于stack exchange,提问作者dsmatana
相关产品推荐
相关产品推荐

