Reconocimiento de voz de Android y grabación de audio en el mismo tiempo

Mi aplicación graba audio usando la clase MediaRecorder en AsyncTask y también usa el discurso de transformación de Google API en texto – Intento de reconocimiento – usando el código de esta pregunta: ¿Cómo puedo usar el reconocimiento de voz sin el molesto diálogo en teléfonos Android?

También intenté grabar audio en Thread, pero esta es una solución peor. Causa más problemas. Mi problema es que mi aplicación funciona correctamente en el emulador. Pero el emulador no es compatible con el reconocimiento de voz debido a la falta de servicios de reconocimiento de voz. Y en mi dispositivo, mi aplicación se cuelga cuando empiezo a grabar audio y voz, “se ha detenido inesperadamente”. Sin embargo, cuando tengo wifi apagado, la aplicación funciona correctamente como en el emulador.

La grabación de audio requiere en AndroidManifest:

 

y requiers de reconocimiento de voz:

   

Supongo que esto es un problema con la entrada de audio individual? ¿Como puedo resolver este problema? Google Speech Recognizer requiere que funcione en el hilo principal de UI, por lo que no puedo, por ejemplo, hacerlo en Async Task. Así que tengo una grabación de audio en Async Task. No tengo idea de por qué esto causa problemas.

He conectado mi dispositivo a Eclipse y he utilizado la depuración de USB. Y esta es la excepción que tengo en LogCat:

 08-23 14:50:03.528: ERROR/ActivityThread(12403): Activity go.android.Activity has leaked ServiceConnection android.speech.SpeechRecognizer$Connection@48181340 that was originally bound here 08-23 14:50:03.528: ERROR/ActivityThread(12403): android.app.ServiceConnectionLeaked: Activity go.android.Activity has leaked ServiceConnection android.speech.SpeechRecognizer$Connection@48181340 that was originally bound here 08-23 14:50:03.528: ERROR/ActivityThread(12403): at android.app.ActivityThread$PackageInfo$ServiceDispatcher.(ActivityThread.java:1121) 08-23 14:50:03.528: ERROR/ActivityThread(12403): at android.app.ActivityThread$PackageInfo.getServiceDispatcher(ActivityThread.java:1016) 08-23 14:50:03.528: ERROR/ActivityThread(12403): at android.app.ContextImpl.bindService(ContextImpl.java:951) 08-23 14:50:03.528: ERROR/ActivityThread(12403): at android.content.ContextWrapper.bindService(ContextWrapper.java:347) 08-23 14:50:03.528: ERROR/ActivityThread(12403): at android.speech.SpeechRecognizer.startListening(SpeechRecognizer.java:267) 08-23 14:50:03.528: ERROR/ActivityThread(12403): at go.android.Activity.startRecordingAndAnimation(Activity.java:285) 08-23 14:50:03.528: ERROR/ActivityThread(12403): at go.android.Activity.onResume(Activity.java:86) 08-23 14:50:03.528: ERROR/ActivityThread(12403): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1151) 08-23 14:50:03.528: ERROR/ActivityThread(12403): at android.app.Activity.performResume(Activity.java:3823) 08-23 14:50:03.528: ERROR/ActivityThread(12403): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3118) 08-23 14:50:03.528: ERROR/ActivityThread(12403): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3143) 08-23 14:50:03.528: ERROR/ActivityThread(12403): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2684) 08-23 14:50:03.528: ERROR/ActivityThread(12403): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 08-23 14:50:03.528: ERROR/ActivityThread(12403): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 08-23 14:50:03.528: ERROR/ActivityThread(12403): at android.os.Handler.dispatchMessage(Handler.java:99) 08-23 14:50:03.528: ERROR/ActivityThread(12403): at android.os.Looper.loop(Looper.java:123) 08-23 14:50:03.528: ERROR/ActivityThread(12403): at android.app.ActivityThread.main(ActivityThread.java:4627) 08-23 14:50:03.528: ERROR/ActivityThread(12403): at java.lang.reflect.Method.invokeNative(Native Method) 08-23 14:50:03.528: ERROR/ActivityThread(12403): at java.lang.reflect.Method.invoke(Method.java:521) 08-23 14:50:03.528: ERROR/ActivityThread(12403): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 08-23 14:50:03.528: ERROR/ActivityThread(12403): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 08-23 14:50:03.528: ERROR/ActivityThread(12403): at dalvik.system.NativeStart.main(Native Method) 

Y después de eso otra excepción:

 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): Failed to create session 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): com.google.android.voicesearch.speechservice.ConnectionException: POST failed 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at com.google.android.voicesearch.speechservice.SpeechServiceHttpClient.post(SpeechServiceHttpClient.java:176) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at com.google.android.voicesearch.speechservice.SpeechServiceHttpClient.post(SpeechServiceHttpClient.java:88) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at com.google.android.voicesearch.speechservice.ServerConnectorImpl.createTcpSession(ServerConnectorImpl.java:118) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at com.google.android.voicesearch.speechservice.ServerConnectorImpl.createSession(ServerConnectorImpl.java:98) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at com.google.android.voicesearch.speechservice.RecognitionController.runRecognitionMainLoop(RecognitionController.java:679) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at com.google.android.voicesearch.speechservice.RecognitionController.startRecognition(RecognitionController.java:463) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at com.google.android.voicesearch.speechservice.RecognitionController.access$200(RecognitionController.java:75) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at com.google.android.voicesearch.speechservice.RecognitionController$1.handleMessage(RecognitionController.java:300) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at android.os.Handler.dispatchMessage(Handler.java:99) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at android.os.Looper.loop(Looper.java:123) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at android.os.HandlerThread.run(HandlerThread.java:60) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): Caused by: java.net.SocketTimeoutException 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at org.apache.harmony.luni.net.PlainSocketImpl.read(PlainSocketImpl.java:564) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at org.apache.harmony.luni.net.SocketInputStream.read(SocketInputStream.java:88) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:103) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:191) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:82) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:174) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:179) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:410) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at android.net.http.AndroidHttpClient.execute(AndroidHttpClient.java:243) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): at com.google.android.voicesearch.speechservice.SpeechServiceHttpClient.post(SpeechServiceHttpClient.java:167) 08-23 14:50:08.000: ERROR/ServerConnectorImpl(12412): ... 10 more 08-23 14:50:08.000: ERROR/RecognitionController(12412): Ignoring error 2