为什么MediaRecorder的start()方法会抛出IllegalStateException异常?

10

我正在尝试录制音频,但是MediaRecorder类的start()方法抛出了一个IllegalStateException异常。

MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile("/sdcard/");
try {
    recorder.prepare();
} catch (IllegalStateException e) {

// TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
Log.i("Try","Exception");
recorder.start(); 

接下来是相关权限

<uses-permission android:name="android.permission.RECORD_AUDIO" />

1
维杰,请粘贴堆栈跟踪。 - DJC
2个回答

13

recorder.setOutputFile("/sdcard/");是设置目录,而非文件。

请将其替换为:

mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
mFileName += "/youraudiofile.3gp";

使用"/sdcard"的硬编码路径是不稳定的,因此请使用上述方法。
此外,要使其工作,您必须添加。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

将此代码添加到你的 AndroidManifest.xml 文件中。

1
WRITE_EXTERNAL_STORAGE 权限解决了我的问题。谢谢DJC。 - Eray

7

IllegalstateException 在调用 MediaRecorder.prepare 方法之前未被调用或在 MediaRecorder.start 之后调用,或在配置音频/视频源、格式和编码器之前调用时被抛出。

在 Android 文档的相机开发者指南中提到的正确配置顺序:

  1. 相机解锁
  2. 将相机控制权交给媒体录制器 -> setCamera
  3. 设置音频/视频源、格式和编码器
  4. 准备
  5. 开始

1
这是唯一对我起作用的方法。改变格式和编码器的顺序使其工作。顺序是源、格式、编码器。谢谢! - Prashanth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接