Android使用ExtAudioRecorder录WAV第二次报错EBADF怎么解决
Android ExtAudioRecorder二次录音报错EBADF解决方案
EBADF (Bad file descriptor) 错误的核心原因是首次录音结束后,相关IO流、录音实例没有被完全释放,第二次录音时复用了已经失效的文件描述符,可按以下步骤逐一修复:
完善ExtAudioRecorder的stop释放逻辑
在stop方法中,完成录音停止操作后,必须依次执行以下释放操作:- 关闭所有打开的IO对象,包括
FileOutputStream、RandomAccessFile等用于写WAV文件的流 - 调用
AudioRecord.release()释放原生录音资源 - 将ExtAudioRecorder内部持有的录音实例、IO流实例变量全部置为null
注意不要只调用AudioRecord.stop()就结束流程,未关闭的文件流会一直持有无效的文件描述符。
- 关闭所有打开的IO对象,包括
每次启动新录音时重新初始化实例
不要复用第一次创建的ExtAudioRecorder全局对象,每次触发录音前,先判断如果已有实例存在,先调用其stop方法完成资源释放,再重新创建新的ExtAudioRecorder实例,传入新生成的WAV文件路径,不要沿用第一次的文件流配置。优化文件路径生成逻辑
每次录音生成独立的文件名,可拼接时间戳作为后缀,避免第二次录音覆盖前一次还未释放的文件;同时每次创建文件前检查存储目录是否存在,调用mkdirs()确保目录可用,避免文件创建失败导致无效描述符。补充异常捕获定位问题
在ExtAudioRecorder的音频写入、初始化文件、停止录音逻辑周围增加IOException捕获,打印详细栈信息确认具体出错节点。
内容的提问来源于stack exchange,提问作者C-Bk
相关产品推荐
相关产品推荐

