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

我正在尝试录制audio,但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" /> 

Solutions Collecting From Web of "为什么MediaRecorder的start()方法会抛出IllegalStateException?"

Vijay,recorder.setOutputFile(“/ sdcard /”); 是设置一个目录,而不是一个文件。 将其replace为:

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

使用“/ sdcard”硬编码一个脆弱的path,所以使用上面的

另外,为了这个工作,你必须添加

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

到你的AndroidManifext.xml

这可能对未来的某个人有所帮助。 IllegalstateException引发MediaRecorder. PrepareMediarecorder.start之后或在configurationaudio/video源,格式和编码器之前,不要调用或调用MediaRecorder. Prepare方法。 在android文档的相机开发者指南中提到的正确的configuration顺序

  1. 相机解锁
  2. 控制相机到媒体logging器 – > setCamera
  3. 设置audio/video源,格式,编码器
  4. 准备
  5. 开始