7
votes

Service d'enregistrement / de traitement des appels! - Android

bonjour, strong>
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.

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>

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)


2 commentaires

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?


4 Réponses :



1
votes

1 commentaires

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.



4
votes

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)


1 commentaires

Incroyable, fonctionne bien! Merci beaucoup! Trop mauvais ive déjà changé de thèse d'ingénierie :)



1
votes

Essayez d'utiliser xxx

au lieu de xxx


0 commentaires