Error starting Android MediaRecorder in invalid state 4

I try to record audio, only audio, and I get this error on android 4.1.2, but not 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 are 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 read hundreds of threads of this error, but I can not find anything that solves my problem ...

+2
source share
4 answers

Well, I found out what my problem was. It:

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

Returns a string containing this character: ":" Replacing it with:

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

Solved my problem.

+4
source

, , . , 4, , .

+5

I had the same problem and realized that the path to my output file is wrong. Correcting the path resolved my issue.

0
source

You need to trigger a reset after initializing the 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();
0
source

All Articles