2012-09-06 16 views
5

Basit bir android ses kaydedici geliştirmeye çalışıyorum.Her şey iyi çalışıyor ve aynı zamanda android cihazda da iyi çalışıyor. Kaydı başlatabilir gibi görünüyor ama durdurmak istediğimde bir IllegalStateException atar. Bu hatayı bulamıyorum.android - MediaRecorder, illegalalstateexception'ı atar

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; 
} 
} 

Ben bunu tetikleyecek istiyorum: İşte kod

VoiceRecorder vr = new VoiceRecorder();

vr.startRecord (devam);

vr.stopRecording (devam);

Logcat diyor başlatmak çağırarak:

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 

(Tamam ne olmalı) Ama dur çağırdığınızda:

o hata atılır gibi görünüyor
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) 

cevap

2

Eğer stop() den çağırdığınızda geçersiz bir durum.

kaydedici için etkinlik döngüsü de size kayıt başlamadan önce) (hazırlamak gerekir belirtmek gibi görünüyor - yapıyorsun bunu? Kayıt cihazı en azından hazır olmadığı sürece stop() geçerli bir komut değildir. kaydedici aslında geçerli bir durumda yerleşmek için daha sonra durak çağırabilmek

  • http://developer.android.com/reference/android/media/MediaPlayer.html#StateDiagram
  • Eğer varsa

      , belki de biraz zaman alır(). 'u () start()' dan hemen sonra çağırıyorsunuzdur, belki orada bir şeyler oluyordur.

    +1

    İkiden fazla köprü yayınlanmasına izin verilmiyor. Bazı okumalar: - http://stackoverflow.com/questions/11852852/stop-called-in-an-invalid-state-1 - http: //www.benmccann.com/dev-blog/android-audio-kayıt-öğretici/ – TheMaster42

    +0

    hmm Ben başlatmadan önce hazırlamak çağırdı ve ben durmak için 20sec gibi bekliyorum Dur –

    +0

    Bu cevap 'MediaPlayer' başvuruyor ama OP MediaRecorder hakkında soruyor –

    4

    Sorun durmuyor, ancak başlangıçta. Doğru başlamadı, bu yüzden sonra durduramazsın. şeylerden

    Kontrol çift: a) Eğer (Ben gereklilik olduğuna emin değilim, ama ben sorunu iç yazılı vardı inanıyoruz SD karta yazma Yani persmission android.permission.RECORD_AUDIO

    b) eklendi O bellek). SD karta yazmak için izne ihtiyacınız olacak.

    c) Ayrıca, http://developer.android.com/reference/android/media/MediaPlayer.html#setOnErrorListener(android.media.MediaPlayer.OnErrorListener onErrorListener ayarlamak için deneyin)

    d) (reset deneyin) Ben http://developer.android.com/reference/android/media/MediaPlayer.html#Valid_and_Invalid_States Android'in MediaRecorder devletler bu makaleyi okumak için öneriyoruz başka görüşmeler önce MediaPlayer kabus.

    +0

    tüm izinler tamam. sd karta değiştirmeyi denedim ve başlangıç ​​kayıt yönteminin başında bir sıfırlama yaptım. Şimdi logcat bana yeni bir tane yazıyor .start(): 09-06 23: 34: 20.310: D/audio_input (123): DoStop: X 09126 23: 34: 20.330: D/audio_input : DoReset E 09-06 23: 34: 20.340: D/audio_input (123): DoReset X 09-06 23: 34: 20.340: E/audio_input (123): desteklenmeyen parametresi: X-pvmf/media-input-node/cap-config-interface valtype = key_specific_value 09-06 23: 34: 20.340: E/audio_input (123): VerifyAndSetParameter başarısız oldu –