Question

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...

Était-ce utile?

La solution 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.

Autres conseils

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.

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();

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top