Android录制音频获取java.lang.IllegalStateException错误

Android录制音频获取java.lang.IllegalStateException错误,android,Android,下面的代码是我的简单录音应用程序,我正在尝试用麦克风录音。录制音频后,我无法停止录制,出现错误: java.lang.IllegalStateException 对于这一行: recorder.stop(); 我的代码: public class MainActivity extends Activity implements OnClickListener { Button startRecordingButton, stopRecordingButton; TextVie

下面的代码是我的简单录音应用程序,我正在尝试用麦克风录音。录制音频后,我无法停止录制,出现错误:

java.lang.IllegalStateException
对于这一行:

recorder.stop();
我的代码:

public class MainActivity extends Activity implements OnClickListener {
    Button startRecordingButton, stopRecordingButton;
    TextView statusText;
    private MediaRecorder recorder = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        recorder = new MediaRecorder();
        statusText = (TextView) this.findViewById(R.id.StatusTextView);

        startRecordingButton = (Button) this
                .findViewById(R.id.StartRecordingButton);
        stopRecordingButton = (Button) this
                .findViewById(R.id.StopRecordingButton);

        startRecordingButton.setOnClickListener(this);
        stopRecordingButton.setOnClickListener(this);

        stopRecordingButton.setEnabled(false);

    }

    public void onClick(View v) {
        if (v == startRecordingButton) {
            record();
        } else if (v == stopRecordingButton) {
            stopRecording();
        }
    }

    public void record() {
        startRecordingButton.setEnabled(false);
        stopRecordingButton.setEnabled(true);
        recordAudio();
    }


private void recordAudio() {
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    recorder.setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath());
    try {
        recorder.prepare();
    } catch (IOException e) {
        e.printStackTrace();
    }
    recorder.start();
}

    public void stopRecording() {
        recorder.stop();
        recorder.release();
    }
}

在记录器.prepare()之后,您没有启动记录器。这就是为什么您遇到非法状态异常,即试图停止从未启动过的记录器

recorder.prepare()之后添加
recorder.start()

其次,您也没有指定任何输出文件名,
recorder.setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath())

将其更改为:
recorder.setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath()+“/recording.wav”
您在
recorder.prepare()
之后没有启动记录器,这就是为什么您遇到非法状态异常,即试图停止从未启动过的记录器

recorder.prepare()之后添加
recorder.start()

其次,您也没有指定任何输出文件名,
recorder.setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath());

将其更改为:
recorder.setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath()+“/recording.wav”

请提供堆栈跟踪。
setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath());
看起来很奇怪。您没有指定文件名。请提供堆栈跟踪。
setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath());
看起来很奇怪。您没有指定文件名。现在我收到了
java.lang.IllegalStateException
recorder.start()的此错误
,更新后,请再次查看,thanksIt不是wav文件,而是3GP容器中的AMR流,因此文件结尾应该是
.3GP
当然,您也可以将其更改为“/recording.3GP”。现在我收到了
recorder.start()的此错误
java.lang.IllegalStateException
,更新后,请再次查看,thanksIt不是wav文件,而是3GP容器中的AMR流,因此文件结尾应该是
.3GP
当然,您也可以将其更改为“/recording.3GP”