You need to enable JavaScript to run this app. Cordova Android10读取录音文件触发FileError NOT_FOUND_ERR问题
优惠活动
大模型
产品
解决方案
定价
更多

Cordova Android10读取录音文件触发FileError NOT_FOUND_ERR问题

Android 10 下 Cordova 音频录制后文件读取报错排查

报错根因

该问题的核心触发原因是Android 10 引入的分区存储(Scoped Storage)机制与当前使用的cordova-android版本适配缺口,和手动授权的存储权限没有直接关联。

问题匹配特征

  • 完全对应你当前的依赖版本栈:
    • cordova@10.0.0
    • cordova-android@9.0.0
    • cordova-plugin-media-capture@3.0.3
    • cordova-plugin-file@6.0.2
  • 系统录音机是独立应用,录制完成的文件默认存储在自身的专属外部存储目录下。按照Android 10的分区存储规则,普通应用就算声明了READ_EXTERNAL_STORAGE权限,也无法直接访问其他应用专属目录下的文件——这也是为什么日志显示文件存在、权限已授予,实际通过FileReader读取时还是抛出路径找不到错误的原因。
  • 你重置开发环境后复现故障,是因为新搭建的环境默认启用了Android 10+的分区存储强制规则,之前能正常运行的旧环境,大概率是手动关闭了该规则做兼容。

可直接落地的修复方案

  • 临时快速验证:在config.xml的Android平台配置块中,添加强制启用传统外部存储访问模式的配置:
    <preference name="AndroidPersistentFileLocation" value="Compatibility" />
    <preference name="android:requestLegacyExternalStorage" value="true" />
    
    重新打包安装后,应用会回退到Android 9及之前的全量外部存储访问逻辑,即可正常读取系统录音机生成的音频文件。
  • 长期合规适配:拿到captureAudio返回的MediaFile对象后,不要直接拼接绝对路径去读取,先通过File插件提供的resolveLocalFileSystemURL方法解析得到应用可访问的FileEntry句柄,再交由FileReader做读取操作,避免跨应用路径的权限校验失败。
  • 注意:如果后续目标适配版本升级到Android 11及以上,requestLegacyExternalStorage属性会完全失效,此时必须适配分区存储规则,通过系统媒体库API查询对应音频文件的可访问URI,不能直接操作文件绝对路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 10:54:07