2012-09-06 3 views
5

나는 간단한 안드로이드 오디오 레코더를 개발하려고합니다. 모든 것이 잘 빌드되고 안드로이드 장치에서도 잘 실행됩니다. 내가 녹음을 시작할 수있는 것처럼 보이지만 내가 멈추고 싶을 때 그것은 IllegalStateException을 던집니다. 나는 그 실수를 발견 할 수 없다.android - MediaRecorder가 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; 
} 
} 

나는 그것을 트리거 할 : 다음은 코드입니다

보이스 레코더의 VR = 새로운 보이스 레코더는();

vr.startRecord (cont);

vr.stopRecording (cont);

로그 캣 말한다 시작 전화 :

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()은 레코더가 준비되지 않은 한 유효한 명령이 아닙니다. 레코더가 실제로 유효한 상태에 정착하는 나중에 정지를 호출하기 전에

  • http://developer.android.com/reference/android/media/MediaPlayer.html#StateDiagram
  • 당신이 경우

      은, 어쩌면이 순간을한다(). start() 이후 으로 바로으로 전화를 걸었으니 거기에 무슨 일이 일어나고있는 것일 수 있습니다.

    +1

    두 개 이상의 하이퍼 링크를 게시 할 수 없습니다. 추가 읽기 : - http://stackoverflow.com/questions/11852852/stop-called-in-an-invalid-state-1 - http : //www.benmccann. – TheMaster42

    +0

    흠, 내가 시작하기 전에 준비를했고, 내가 멈출 때까지 20 초 정도 기다려야한다. –

    +0

    이 답변은'MediaPlayer'를 참조하고 있지만, OP는'MediaRecorder ' –

    4

    문제는 정지 상태가 아니라 시작 상태입니다. 그것은 올바르게 시작되지 않습니다. 그래서 당신은 나중에 그것을 막을 수 없습니다. 사물의

    확인 부부 : 가) 당신이 (나는 그것이 요구 사항입니다 잘 모르겠지만, 내가 문제를 내부에 기록을했다 생각 SD 카드에 작성하는 것이 persmission android.permission.RECORD_AUDIO

    B)를 추가 한 기억). SD 카드에 쓸 수있는 권한이 필요합니다.

    C) 또한, http://developer.android.com/reference/android/media/MediaPlayer.html#setOnErrorListener(android.media.MediaPlayer.OnErrorListener을 onErrorListener 설정하려고)

    D) (다시 시도) 나는 http://developer.android.com/reference/android/media/MediaPlayer.html#Valid_and_Invalid_States 안드로이드의 MediaRecorder는 주장이 기사를 읽는 것이 좋습니다 다른 통화 전에 MediaPlayer를은 악몽이다.

    +0

    모든 권한이 괜찮습니다. 나는 sd 카드로 변경을 시도하고 startrecording 방법의 시작 부분에 재설정을 했어. 이제 logcat이 .start()에 새로운 소식을 전합니다. 09-06 23 : 34 : 20.310 : D/audio_input (123) : DoStop : X 09-06 23 : 34 : 20.330 : D/audio_input (123) : DoReset : E 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가 실패했습니다. –

    관련 문제