2012-09-06 156 views
5

我想開發一個簡單的android錄音recorder.Everything builds罰款,它也運行在Android設備上罰款。似乎我可以開始錄製,但是當我想停止它時會拋出IllegalStateException異常。我找不到這個錯誤。下面是代碼:android-MediaRecorder throws illegalstateexception

public class VoiceRecorder { 
MediaRecorder recorder= new MediaRecorder(); 
static Context cont; 

public void startRecord(Context context) throws IllegalStateException, IOException{ 
    cont = context; 

    recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
    recorder.setOutputFile(cont.getFilesDir()+"/recordings.3gp"); 
    recorder.prepare(); 
    recorder.start(); 

} 
public void stopRecording(Context context) { 
    cont = context; 
    recorder.stop(); 
    recorder.release(); 
    File file = new File (cont.getFilesDir()+"/recordings.3gp"); 
    UploadFile.uploadFile("recordings.3gp", file); 
    recorder = null; 
} 
} 

我想觸發它​​:

VoiceRecorder VR =新VoiceRecorder();

vr.startRecord(cont);

vr.stopRecording(cont);調用啓動logcat的說,當

:(什麼應該沒問題)

09-06 22:56:42.830: D/AudioHardwareMSM72XX(123): audpre_index = 0, tx_iir_index = 0 
09-06 22:56:42.840: D/HTC Acoustic(123): msm72xx_enable_audpre: 0x0000 
09-06 22:56:42.850: I/AudioHardwareMSM72XX(123): Routing audio to Speakerphone 
09-06 22:56:42.850: D/HTC Acoustic(123): msm72xx_enable_audpp: 0x0001 
09-06 22:56:42.850: I/AudioHardwareMSM72XX(123): Routing audio to Speakerphone 
09-06 22:56:42.860: D/HTC Acoustic(123): msm72xx_enable_audpp: 0x0001 
09-06 22:56:42.870: D/AudioFlinger(123): setParameters(): io 3, keyvalue routing=262144;vr_mode=0, tid 156, calling tid 123 
09-06 22:56:42.870: I/AudioHardwareMSM72XX(123): Routing audio to Speakerphone 
09-06 22:56:42.880: D/AudioHardwareMSM72XX(123): audpre_index = 0, tx_iir_index = 0 
09-06 22:56:42.880: D/HTC Acoustic(123): msm72xx_enable_audpre: 0x0000 
09-06 22:56:42.880: I/AudioHardwareMSM72XX(123): do input routing device 40000 
09-06 22:56:42.880: I/AudioHardwareMSM72XX(123): Routing audio to Speakerphone 
09-06 22:56:42.890: D/HTC Acoustic(123): msm72xx_enable_audpp: 0x0001 

但是,當我打電話停止:

09-06 22:59:52.440: E/MediaRecorder(1069): stop called in an invalid state: 1 
09-06 22:59:52.440: W/System.err(1069): java.lang.IllegalStateException 
09-06 22:59:52.460: W/System.err(1069):  at android.media.MediaRecorder.stop(Native Method) 
09-06 22:59:52.460: W/System.err(1069):  at de.spyapp.VoiceRecorder.stopRecording(VoiceRecorder.java:33) 
09-06 22:59:52.460: W/System.err(1069):  at de.spyapp.CheckCMD.checkCMD(CheckCMD.java:30) 
09-06 22:59:52.460: W/System.err(1069):  at de.spyapp.AppActivity$2.run(AppActivity.java:44) 
09-06 22:59:52.460: W/System.err(1069):  at java.lang.Thread.run(Thread.java:1096) 

回答

2

它看起來像那個錯誤被拋出,當你調用從停止()無效的狀態。

錄像機的活動週期也似乎表明,你需要準備()之前,你就可以開始錄音 - 你在幹什麼呢?除非記錄器至少準備好,否則stop()不是有效的命令。

如果你是,也許這需要一段時間的記錄實際上處於有效狀態,解決之前,你可以再打停止()。你在開始()後立即調用它所以也許發生了一些事情。

+1

不允許發佈兩個以上的超鏈接。一些進一步閱讀: - http://stackoverflow.com/questions/11852852/stop-called-in-an-invalid-state-1 - http://www.benmccann。com/dev-blog/android-audio-recording-tutorial/ – TheMaster42

+0

嗯,我打電話準備開始之前,我等待20秒,直到我呼籲停止 –

+0

這個答案是引用'MediaPlayer',但OP是問'MediaRecorder ' –

4

問題不在於停止,而是在開始。它不能正確啓動,這就是爲什麼你以後無法停止它的原因。

檢查兩件事情:一個 )您添加persmission android.permission.RECORD_AUDIO

B)你寫的SD卡(我不知道它的要求,但我相信我有問題寫入內部記憶)。您需要獲得寫入SD卡的權限。

c)還,嘗試設置onErrorListener http://developer.android.com/reference/android/media/MediaPlayer.html#setOnErrorListener(android.media.MediaPlayer.OnErrorListener

d)嘗試reset()方法的MediaPlayer之前的任何其他呼叫 我會推薦閱讀這篇文章 http://developer.android.com/reference/android/media/MediaPlayer.html#Valid_and_Invalid_States Android的MediaRecorder美國是噩夢。

+0

所有權限都可以。我試圖改用SD卡,並在startrecording方法開始時重置。現在logcat告訴我新的on.start(): 09-06 23:34:20.310:D/audio_input(123):DoStop:X 09-06 23:34:20.330:D/audio_input(123) :DoReset:電子 09-06 23:34:20.340:d/audio_input(123):DoReset:X 09-06 23:34:20.340:E/audio_input(123):不支持的參數: 的x PVMF/media-input-node/cap-config-interface; valtype = key_specific_value 09-06 23:34:20.340:E/audio_input(123):VerifyAndSetParameter failed –

相關問題