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

时间:2011-03-03 05:32:36

标签: android mediarecorder illegalstateexception user-permissions

我正在尝试录制音频,但start()类的MediaRecorder方法会引发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" />

2 个答案:

答案 0 :(得分:13)

Vijay,recorder.setOutputFile(“/ sdcard /”);正在设置目录,而不是文件。 将其替换为:

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

使用“/ sdcard”硬编码脆弱的路径,所以使用上面的

此外,为此,您必须添加

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

到您的AndroidManifext.xml

答案 1 :(得分:5)

将来可能对某些人有所帮助。在IllegalstateException之后或在配置音频/视频源,格式和编码器之前未调用或调用MediaRecorder. Prepare方法时,会引发Mediarecorder.start。 在android文档的相机开发者指南中提到的正确配置顺序

  
      
  1. 相机解锁
  2.   
  3. 控制相机到媒体记录器 - &gt; setCamera
  4.   
  5. 设置音频/视频源,格式,编码器
  6.   
  7. 制备
  8.   
  9. 启动
  10.