android - MediaRecorder throws exception illegalstateexception
Je suis en train de développer un simple android enregistreur audio.Tout s'appuie fine et il fonctionne aussi bien sur l'appareil android. Il me semble que je peut lancer l'enregistrement, mais quand je veux l'arrêter, déclenche une exception IllegalStateException. Je ne trouve pas l'erreur. Voici le code:
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;
}
}
Je veux le lancer avec:
VoiceRecorder vr = new VoiceRecorder();
vr.startRecord(suite);
vr.stopRecording(suite);
lors de l'appel de commencer Logcat dit: (ce qui devrait être ok)
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
Mais quand je l'appelle stop:
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)
OriginalL'auteur Dominik Trenz | 2012-09-06
Vous devez vous connecter pour publier un commentaire.
Le problème n'est pas à l'arrêt, mais au départ. Il ne démarre pas correctement, c'est pourquoi vous ne pouvez pas l'arrêter plus tard.
Vérifier deux ou trois choses:
a) Que vous avez ajouté persmission android.la permission.RECORD_AUDIO
b) Que vous écrivez sur la carte SD (je ne suis pas sûr que c'est, mais je crois que j'ai eu des problème d'écriture dans la mémoire interne). Vous aurez besoin de la permission d'écrire sur la carte SD.
c) Aussi, essayez de onErrorListener
http://developer.android.com/reference/android/media/MediaPlayer.html#setOnErrorListener(android.media.MediaPlayer.OnErrorListener)
d) Essayer de reset() MediaPlayer avant tous les autres appels
Je vous recommande de lire cet article
http://developer.android.com/reference/android/media/MediaPlayer.html#Valid_and_Invalid_States
Android MediaRecorder unis est le cauchemar.
OriginalL'auteur Victor Ronin
Il semble que l'erreur est renvoyée lorsque vous appelez stop() à partir d'un état non valide.
Le cycle d'activité de l'enregistreur semble aussi indiquer que vous avez à préparer() avant de pouvoir commencer l'enregistrement - tu fais ça? stop() n'est pas une commande valide, à moins que l'enregistreur est à moins préparé.
Si vous êtes, peut-être, il faut un moment pour l'enregistreur à régler réellement dans un état valide avant de vous peut appeler plus tard stop(). Vous êtes en l'appelant immédiatement après le début de la (), donc peut-être quelque chose qui s'y passe.
hmm j'ai appelé le préparer avant de commencer et je suis en attente comme 20sec jusqu'à ce que j'appel de l'arrêt de
Cette réponse est de référencement
MediaPlayer
mais l'OP est de demander à propos deMediaRecorder
OriginalL'auteur TheMaster42