Le fichier audio créé est vide.
Une exception est lancée lorsque Recorder.Stop () est appelée à mon service. Où est une erreur? Que pourrais-je faire mieux? P> Premier (autonome) BroadCastraiver: P>
Je travaille sur une solution pour Android qui enregistrera des appels (à l'abri et à l'incommodage) et traitera des données enregistrées (au point final de ma demande, aucune donnée audio-fichier ne sera maintenue sur la mémoire du téléphone). J'ai mis en œuvre BroadCastraCeiver avec phonestatelistener.listen_call_state qui commence un service d'enregistrement si l'état est Call_State_offhook. Ensuite, dans le service, je démarre un nouveau fil qui tente d'enregistrer un appel et d'un autre Broadcastructeur avec phonestatelistener.listen_call_state, qui appelle une méthode pour arrêter l'enregistrement si l'état du téléphone est modifié en téléphonieManager.Call_state_idle. 11-28 14:28:44.385: E/MediaRecorder(22438): stop called in an invalid state: 8
11-28 14:28:44.400: D/AndroidRuntime(22438): Shutting down VM
11-28 14:28:44.425: W/dalvikvm(22438): threadid=1: thread exiting with uncaught exception (group=0x4001e578)
11-28 14:28:44.435: E/AndroidRuntime(22438): FATAL EXCEPTION: main
11-28 14:28:44.435: E/AndroidRuntime(22438): java.lang.IllegalStateException
11-28 14:28:44.435: E/AndroidRuntime(22438): at android.media.MediaRecorder.stop(Native Method)
11-28 14:28:44.435: E/AndroidRuntime(22438): at com.piotr.callerrecogniser.CallRecordingService.stopRecording(CallRecordingService.java:159)
11-28 14:28:44.435: E/AndroidRuntime(22438): at com.piotr.callerrecogniser.CallRecordingService$1$MyPhoneStateListener.onCallStateChanged(CallRecordingService.java:65)
11-28 14:28:44.435: E/AndroidRuntime(22438): at android.telephony.PhoneStateListener$2.handleMessage(PhoneStateListener.java:369)
11-28 14:28:44.435: E/AndroidRuntime(22438): at android.os.Handler.dispatchMessage(Handler.java:99)
11-28 14:28:44.435: E/AndroidRuntime(22438): at android.os.Looper.loop(Looper.java:123)
11-28 14:28:44.435: E/AndroidRuntime(22438): at android.app.ActivityThread.main(ActivityThread.java:3691)
11-28 14:28:44.435: E/AndroidRuntime(22438): at java.lang.reflect.Method.invokeNative(Native Method)
11-28 14:28:44.435: E/AndroidRuntime(22438): at java.lang.reflect.Method.invoke(Method.java:507)
11-28 14:28:44.435: E/AndroidRuntime(22438): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
11-28 14:28:44.435: E/AndroidRuntime(22438): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
11-28 14:28:44.435: E/AndroidRuntime(22438): at dalvik.system.NativeStart.main(Native Method)
4 Réponses :
J'ai oublié de mentionner que cela crée un fichier audio vide, alors je présume que la méthode Recorder.Start () est atteinte. En outre, plus d'enregistrement du drapeau booléen est défini sur true uniquement à cet endroit avant Recorder.Start (). Donc, cette méthode s'appelle le plus probable.
PEJTER, P>
J'ai eu une exigence similaire lorsque j'ai essayé de porter à Android une demande que j'ai développée pour les téléphones Symbian. P>
Après quelques recherches, je suis arrivé à la triste conclusion que cela est probablement impossible sur la plupart (peut-être même sur tous) les téléphones Android disponibles aujourd'hui. P>
Malgré l'API nécessaire depuis Android 1.6, la plupart des téléphones Android ne l'appuient pas non plus en raison de l'architecture matérielle ou de la mise en œuvre du micrologiciel. Fondamentalement, le problème est que le processeur de téléphone principal n'a pas accès au flux audio de baseband. Il a généralement accès au microphone local, donc sur certains téléphones qu'il est possible d'enregistrer l'utilisateur local et éventuellement un faible signal de l'utilisateur distant qui atteint le microphone à travers un couplage acoustique entre l'écouteur et le micro. Cela n'était pas assez bon pour les exigences de mon application, alors je n'ai toujours pas de version Android. P>
Je sais que je ne résolvez pas votre problème (et cela peut-être même sans rapport avec l'exception que vous obtenez), mais peut-être que cela vous évitera de perdre votre temps. P>
Pour plus d'informations, vous pouvez consulter les éléments suivants: P>
media.tumblr.com/tumblr_los755kzxe1qf51e1.jpg
Si la situation est modifiée sur le sujet S'il vous plaît informez-moi, je contribuerai également à ce fil si je parviens à trouver une solution.
J'ai testé votre code avec de petites modifications sur mon Samsung Galaxy S2. Il wok assez bien sans exceptions. L'appel a été enregistré avec succès en utilisant le service. Le seul problème que j'ai trouvé est que le service a été démarré deux fois (le récepteur de diffusion a été lancé deux fois et la téléphonieManager.PhoneStatelistner a appelé deux fois avec l'état offhook) Je dois changer constant dans la méthode SetaAtuaDiosource de Voice_Call en voix_uplink. Il ressemble à la définition Java Enum et Enum in c en-tête est différent. L'appel a été enregistré pour les deux côtés (liaison montante et liaison descendante) p>
Incroyable, fonctionne bien! Merci beaucoup! Trop mauvais ive déjà changé de thèse d'ingénierie :)
Essayez d'utiliser au lieu de p>
hey est-ce que ça marche pour vous enregistrer les deux côtés?
Quel était l'action_filter pour le récepteur de diffusion dans le manifeste?