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

Android使用ExtAudioRecorder录WAV第二次报错EBADF怎么解决

Android ExtAudioRecorder二次录音报错EBADF解决方案

EBADF (Bad file descriptor) 错误的核心原因是首次录音结束后,相关IO流、录音实例没有被完全释放,第二次录音时复用了已经失效的文件描述符,可按以下步骤逐一修复:

  • 完善ExtAudioRecorder的stop释放逻辑
    在stop方法中,完成录音停止操作后,必须依次执行以下释放操作:

    1. 关闭所有打开的IO对象,包括FileOutputStream、RandomAccessFile等用于写WAV文件的流
    2. 调用AudioRecord.release()释放原生录音资源
    3. 将ExtAudioRecorder内部持有的录音实例、IO流实例变量全部置为null
      注意不要只调用AudioRecord.stop()就结束流程,未关闭的文件流会一直持有无效的文件描述符。
  • 每次启动新录音时重新初始化实例
    不要复用第一次创建的ExtAudioRecorder全局对象,每次触发录音前,先判断如果已有实例存在,先调用其stop方法完成资源释放,再重新创建新的ExtAudioRecorder实例,传入新生成的WAV文件路径,不要沿用第一次的文件流配置。

  • 优化文件路径生成逻辑
    每次录音生成独立的文件名,可拼接时间戳作为后缀,避免第二次录音覆盖前一次还未释放的文件;同时每次创建文件前检查存储目录是否存在,调用mkdirs()确保目录可用,避免文件创建失败导致无效描述符。

  • 补充异常捕获定位问题
    在ExtAudioRecorder的音频写入、初始化文件、停止录音逻辑周围增加IOException捕获,打印详细栈信息确认具体出错节点。

内容的提问来源于stack exchange,提问作者C-Bk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:15:03