Android使用MediaRecorder录音导致java.lang.RuntimeException: start failed.

项目中有录音功能使用到了MediaRecorder,但是这个玩意使用的时候经常会遇到java.lang.RuntimeException: start failed.这个异常,而且这个问题还不是针对全部机型,我把我遇到这个问题及解决方案记录下,希望可以帮助大家:

我遇到的情况是不同版本的Android系统会遇到不同的情况,其中SDK<22的会报上述异常,SDK>22的则不会,但是如果使用AndroidAudioConverter进行转码的时候会出现转码异常,针对这个问题我就试着改一些东西,最后还真给我试出来了,但是为什么会这样,我还是不知道,希望哪位大神知道是为什么的给我解下惑,如下代码是我的解决方案:

mRecorder = new MediaRecorder();
// 设置输出文件
mRecorder.setOutputFile(file.getAbsolutePath());
// 设置meidaRecorder的音频源是麦克风
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
// 设置文件音频的输出格式为amr
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
// 设置音频的编码格式为amr。这里采用AAC主要为了适配IOS,保证在IOS上可以正常播放。
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1 ){
    mRecorder.setAudioSamplingRate(11025);
}
// 严格遵守google官方api给出的mediaRecorder的状态流程图
mRecorder.prepare();

mRecorder.start();
其中红字标注的地方判断SDK的版本号来设置编码采样率,我就是这样来解决java.lang.RuntimeException: start failed异常的。如有其它解决方案希望大家评论下来帮助更多同学。

你可能感兴趣的:(异常总结)