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

ram*_*ram 10 android user-permissions illegalstateexception mediarecorder

我正在尝试录制音频,但是类的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(); 
Run Code Online (Sandbox Code Playgroud)

并获得许可

<uses-permission android:name="android.permission.RECORD_AUDIO" />
Run Code Online (Sandbox Code Playgroud)

DJC*_*DJC 13

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

mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
mFileName += "/youraudiofile.3gp";
Run Code Online (Sandbox Code Playgroud)

使用"/ sdcard"硬编码脆弱的路径,所以使用上面的方法

此外,为此,您必须添加

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)

到您的AndroidManifext.xml


use*_*884 6

将来对某些人可能会有帮助。在配置音频/视频源,格式和编码器之后或之前未调用IllegalstateExceptionMediaRecorder. Prepare方法时,抛出该异常Mediarecorder.start。在Android文档上的《相机开发人员指南》中提到的正确配置顺序

  1. 相机解锁
  2. 控制摄像机到媒体记录器-> setCamera
  3. 设置音频/视频源,格式,编码器
  4. 准备
  5. 开始