Android MediaRecorder start failed in invalid state 4

谁说我不能喝 提交于 2019-11-30 09:35:32

问题


I try to record the audio, only the audio, and I get this error on android 4.1.2 but not on 4.3:

Here is the code:

private void startRecord(){
    on_record = true;
    final boolean exists = (new File(Environment.getExternalStorageDirectory() + File.separator + NOTAY)).exists();
        if (!exists) {new File(Environment.getExternalStorageDirectory() + File.separator + "Test").mkdirs();}

        final boolean existAud = (new File(android.os.Environment.getExternalStorageDirectory() + File.separator + NOTAY + File.separator + "Audio")).exists();
        if (!existAud) {new File(Environment.getExternalStorageDirectory() + File.separator + "Test" + File.separator + "Audio").mkdirs();}

        final EditText editTitle= (EditText) findViewById(R.id.editTitle);
        final String title = editTitle.getText().toString();
        final String audioName = getDate(System.currentTimeMillis()).replaceAll(" ", "_");
        currentAudioPath =    Environment.getExternalStorageDirectory().getAbsolutePath()
                            + File.separator
                            + "Test"
                            + File.separator
                            + "Audio"
                            + File.separator
                            + System.currentTimeMillis() + "-" + audioName + ".3gpp";

        if(title.length() == 0)
            editTitle.setText(audioName);

        Recorder = new MediaRecorder();

        Recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        Recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
        Recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
        Recorder.setOutputFile(currentAudioPath);


        try {
            Recorder.prepare();
        } catch (IOException e) {

        }

        Recorder.start();

    }

    private void saveRecord(){

        Recorder.stop();
        Recorder.release();
        Recorder = null;
        on_record = false;

        currentAudioPath = NO_AUDIO;

    }

And here the logs:

10-24 08:34:02.777: E/MediaRecorder(13491): start called in an invalid state: 4
10-24 08:34:02.777: D/AndroidRuntime(13491): Shutting down VM
10-24 08:34:02.777: W/dalvikvm(13491): threadid=1: thread exiting with uncaught exception (group=0x40e5b440)
10-24 08:34:02.823: E/AndroidRuntime(13491): FATAL EXCEPTION: main
10-24 08:34:02.823: E/AndroidRuntime(13491): java.lang.IllegalStateException
10-24 08:34:02.823: E/AndroidRuntime(13491):    at android.media.MediaRecorder.start(Native Method)
10-24 08:34:02.823: E/AndroidRuntime(13491):    at com.androtest.audio.startRecord(AudioActivity.java:357)
10-24 08:34:02.823: E/AndroidRuntime(13491):    at com.androtest.audio.onOptionsItemSelected(AudioActivity.java:307)
10-24 08:34:02.823: E/AndroidRuntime(13491):    at android.app.Activity.onMenuItemSelected(Activity.java)
10-24 08:34:02.823: E/AndroidRuntime(13491):    at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java)
10-24 08:34:02.823: E/AndroidRuntime(13491):    at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java)
10-24 08:34:02.823: E/AndroidRuntime(13491):    at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java)
10-24 08:34:02.823: E/AndroidRuntime(13491):    at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java)
10-24 08:34:02.823: E/AndroidRuntime(13491):    at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java)
10-24 08:34:02.823: E/AndroidRuntime(13491):    at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java)
10-24 08:34:02.823: E/AndroidRuntime(13491):    at android.view.View.performClick(View.java)
10-24 08:34:02.823: E/AndroidRuntime(13491):    at android.view.View$PerformClick.run(View.java)
10-24 08:34:02.823: E/AndroidRuntime(13491):    at android.os.Handler.handleCallback(Handler.java)
10-24 08:34:02.823: E/AndroidRuntime(13491):    at android.os.Handler.dispatchMessage(Handler.java)
10-24 08:34:02.823: E/AndroidRuntime(13491):    at android.os.Looper.loop(Looper.java)
10-24 08:34:02.823: E/AndroidRuntime(13491):    at android.app.ActivityThread.main(ActivityThread.java)
10-24 08:34:02.823: E/AndroidRuntime(13491):    at java.lang.reflect.Method.invokeNative(Native Method)
10-24 08:34:02.823: E/AndroidRuntime(13491):    at java.lang.reflect.Method.invoke(Method.java:511)
10-24 08:34:02.823: E/AndroidRuntime(13491):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
10-24 08:34:02.823: E/AndroidRuntime(13491):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
10-24 08:34:02.823: E/AndroidRuntime(13491):    at dalvik.system.NativeStart.main(Native Method)

I've read hundreds of thread on this error but I can't find anything that solves my issue...


回答1:


I had the same error and solved it by fixing the path of the file. So if you have invalid state 4, check if you have output file path set and if it really exists.




回答2:


Ok I find out what was my problem. This:

final String audioName = getDate(System.currentTimeMillis()).replaceAll(" ", "_");

Return a string that contains this character: ":" Replacing it by:

final String audioName = (getDate(System.currentTimeMillis()).replaceAll(" ", "_")).replaceAll(":", "-");

Solved my issue.




回答3:


I had the same issue and then realized the path to my output file was incorrect. Correcting the path solved my issue.




回答4:


You need to call reset after initializing Recorder

     Recorder = new MediaRecorder();
            Recorder.reset();
            Recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            Recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
            Recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
            Recorder

.setOutputFile(currentAudioPath);


        try {
            Recorder.prepare();
        } catch (IOException e) {

        }

        Recorder.start();


来源:https://stackoverflow.com/questions/19558812/android-mediarecorder-start-failed-in-invalid-state-4

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!