我想在按住按鈕時開始錄製帶有MediaRecorder
的語音郵件。試圖在onLongClickListener
中開始錄製時,我收到了IllegalStateException
。在onLongClickListener中調用MediaRecorder.start時android.media.MediaRecorder.start中的java.lang.IllegalStateException
如堆棧跟蹤注意到我收到的錯誤是219線:recorder.start()
這究竟是爲什麼?
btnSendVoice.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
isVoiceButtonHeld = true;
startRecording();
return false;
}
});
btnSendVoice.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
view.onTouchEvent(event);
if (event.getAction() == MotionEvent.ACTION_UP) {
if (isVoiceButtonHeld) {
isVoiceButtonHeld = false;
stopRecording();
}
}
return false;
}
});
private void startRecording() {
Toast.makeText(getActivity(), "Recording Message", Toast.LENGTH_SHORT).show();
filename = Environment.getExternalStorageDirectory().getAbsolutePath() + "/audiotest.3gp";
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setOutputFile(filename);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try { recorder.prepare(); }
catch (IOException e) { Log.e("MediaRecorder", "prepare() failed"); }
recorder.start();
}
private void stopRecording() {
Toast.makeText(getActivity(), "Recording Finished", Toast.LENGTH_SHORT).show();
recorder.stop();
recorder.release();
recorder = null;
}
@Override
public void onPause() {
super.onPause();
// Free up resources from MediaRecorder when leaving Fragment
if (recorder != null) {
recorder.release();
recorder = null;
}
}
logcat的
07-15 16:24:32.256: E/MediaRecorder(4227): start failed: -38
07-15 16:24:32.256: D/AndroidRuntime(4227): Shutting down VM
07-15 16:24:32.256: W/dalvikvm(4227): threadid=1: thread exiting with uncaught exception (group=0x41551ba8)
07-15 16:24:32.406: E/AndroidRuntime(4227): FATAL EXCEPTION: main
07-15 16:24:32.406: E/AndroidRuntime(4227): Process: com.walintukai.lfdate, PID: 4227
07-15 16:24:32.406: E/AndroidRuntime(4227): java.lang.IllegalStateException
07-15 16:24:32.406: E/AndroidRuntime(4227): at android.media.MediaRecorder.start(Native Method)
07-15 16:24:32.406: E/AndroidRuntime(4227): at com.walintukai.lfdate.ChatFragment.startRecording(ChatFragment.java:219)
07-15 16:24:32.406: E/AndroidRuntime(4227): at com.walintukai.lfdate.ChatFragment.access$4(ChatFragment.java:206)
07-15 16:24:32.406: E/AndroidRuntime(4227): at com.walintukai.lfdate.ChatFragment$3.onLongClick(ChatFragment.java:132)
07-15 16:24:32.406: E/AndroidRuntime(4227): at android.view.View.performLongClick(View.java:4474)
07-15 16:24:32.406: E/AndroidRuntime(4227): at android.view.View$CheckForLongPress.run(View.java:18418)
07-15 16:24:32.406: E/AndroidRuntime(4227): at android.os.Handler.handleCallback(Handler.java:733)
07-15 16:24:32.406: E/AndroidRuntime(4227): at android.os.Handler.dispatchMessage(Handler.java:95)
07-15 16:24:32.406: E/AndroidRuntime(4227): at android.os.Looper.loop(Looper.java:136)
07-15 16:24:32.406: E/AndroidRuntime(4227): at android.app.ActivityThread.main(ActivityThread.java:5050)
07-15 16:24:32.406: E/AndroidRuntime(4227): at java.lang.reflect.Method.invokeNative(Native Method)
07-15 16:24:32.406: E/AndroidRuntime(4227): at java.lang.reflect.Method.invoke(Method.java:515)
07-15 16:24:32.406: E/AndroidRuntime(4227): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
07-15 16:24:32.406: E/AndroidRuntime(4227): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
07-15 16:24:32.406: E/AndroidRuntime(4227): at dalvik.system.NativeStart.main(Native Method)
我已經把它放在那裏。我有記錄,當我使用常規按鈕時,停止並播放早期工作的功能。當我將記錄函數放入'onLongClickListener'時出現這個問題。 –
第一次或第二次長時間點擊時是否崩潰? – joao2fast4u
第一次長時間點擊時會崩潰。 –