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.IllegalStateExceptionrecorder.start()的此错误
,更新后,请再次查看,thanksIt不是wav文件,而是3GP容器中的AMR流,因此文件结尾应该是.3GP
当然,您也可以将其更改为“/recording.3GP”。现在我收到了recorder.start()的此错误java.lang.IllegalStateException
)
,更新后,请再次查看,thanksIt不是wav文件,而是3GP容器中的AMR流,因此文件结尾应该是.3GP
当然,您也可以将其更改为“/recording.3GP”