媒体录像机上的非法国家例外

时间:2013-06-04 21:02:07

标签: android illegalstateexception android-mediarecorder

我想使用Media Recorder录制音频文件并将其保存到sd card。调试器显示行recorder.start()引发了IllegalStateException。代码取自android dev网站,唯一的变化是文件名和路径。

当我在调试菜单中出现错误时,我会看到View类,其中显示:

未找到来源。 源附件不包含View.class文件的源。 您可以通过单击下面的更改附加源来更改源附件:

canRecord是一个boolean,最初设置为true,它指示在onClick函数中调用哪个方法。该功能正在发挥作用。

@SuppressLint("SimpleDateFormat")
private void record(){

    SimpleDateFormat timeStampFormat = new SimpleDateFormat("MM/dd/yyyy");
    String audio_path = Environment.getExternalStorageDirectory() + "/resources/resources/WI1/";
    String fileName = username +"-"+ timeStampFormat.format(new Date())+".mp4"; 
    audio_button.setText("Recording");

    recorder = new MediaRecorder();
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    recorder.setOutputFile(audio_path+fileName);
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    try {
        recorder.prepare();
    } catch (IOException e) {
        Toast.makeText(this, "Can't record audio at this time", Toast.LENGTH_SHORT).show();
        e.printStackTrace();
    }
    canRecord = false;
    recorder.start();
} // record

这是停止录制功能,虽然它从未达到过这一点。

private void stopRecording(){
    audio_button.setText("Attach Audio");
    recorder.stop();
    recorder.release();
}

最后,我在清单中添加了以下权限:

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

我该如何解决这个问题?谢谢!

2 个答案:

答案 0 :(得分:2)

可能是你给录音机的文件名有问题。试试这个:

String audio_path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/resources/resources/WI1/";
    String fileName = audiopath+"-"+ timeStampFormat.format(new Date())+".mp4";

愿它有所帮助......

答案 1 :(得分:1)

我正在使用libgdx(多平台开源游戏引擎),当我尝试使用androids代码而不是libgdx代码进行录制时,我遇到了类似的问题。转出我需要处理我的libgdx记录器代码或只是删除这一切。也许你还有另一台录音机干扰某处