java.lang.IllegalStateException em android.media.MediaRecorder.start (método nativo)

Quero criar um aplicativo de gravador de voz, mas ele trava quando clico no botão "Iniciar gravação". Eu recebo um erro dizendo java.lang.IllegalStateException em android.media.MediaRecorder.start (método nativo). Também anexei o log.

package com.example.sahil.chuckit;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Environment;
import java.io.File;

public class MainActivity extends Activity {

    private static Button submit;
    private static Button submit2;
    private static Button submit3;
    private static Button submit4;
    private MediaPlayer mediaPlayer;
    private MediaRecorder recorder;
    private String output_file;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        output_file = Environment.getExternalStorageState() +    "/audiorecorder.3gpp";
        OnClickButtonListener();OnClickButtonListener1();
        OnClickButtonListener3();OnClickButtonListener4();
     }
     public void OnClickButtonListener(){
        submit =(Button)findViewById(R.id.button);
        submit.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        beginRecording();

                    }
                    }

        );

    }
    public void OnClickButtonListener1(){
        submit2 =(Button)findViewById(R.id.button2);
        submit2.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        stopRecording();
                    }
                }
        );

    }

    public void OnClickButtonListener3(){
        submit3 =(Button)findViewById(R.id.button3);
        submit3.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        try {
                            playRecording();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
        );

    }
    public void OnClickButtonListener4(){
        submit4 =(Button)findViewById(R.id.button4);
        submit4.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                      stopPlayback();
                    }
                }
        );

    }
    private void ditchMediaRecorder() {
        if (recorder != null)
            recorder.release();
    }
    private void beginRecording() {
        ditchMediaRecorder();
        File outFile=new File(output_file);

        if (outFile.exists())
        { outFile.delete();}

        recorder=new MediaRecorder();
        recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        recorder.setOutputFile(output_file);
        recorder.start();
    }
    private void stopRecording() {
        if(recorder!=null)
            recorder.stop();
    }

    private void playRecording() throws Exception {
        ditchMediaPlayer();
        mediaPlayer=new MediaPlayer();
        mediaPlayer.setDataSource(output_file);
        mediaPlayer.prepare();
        mediaPlayer.start();
    }

    private void ditchMediaPlayer() {
        if(mediaPlayer!=null)
        {
            try{
                mediaPlayer.release();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

    private void stopPlayback() {
        if (mediaPlayer!=null)
            mediaPlayer.stop();
    }




}

Logcat:

LOG:06-30 05:11:12.603 24621-24621/com.example.sahil.chuckit E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.sahil.chuckit, PID: 24621 java.lang.IllegalStateException
    at android.media.MediaRecorder.start(Native Method)
    at com.example.sahil.chuckit.MainActivity.beginRecording(MainActivity.java:111)
    at com.example.sahil.chuckit.MainActivity.access$000(MainActivity.java:22)
    at com.example.sahil.chuckit.MainActivity$1.onClick(MainActivity.java:46)
    at android.view.View.performClick(View.java:5198)
    at android.view.View$PerformClick.run(View.java:21147)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5417)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
06-30 05:11:14.891 24621-24621/com.example.sahil.chuckit I/Process: Sending signal. PID: 24621 SIG: 9

questionAnswers(2)

yourAnswerToTheQuestion