2011-04-27 13 views
22

En mi aplicación basada en reconocimiento de voz, algunas veces recibo ERROR_RECOGNIZER_BUSY. Intuitivamente, esto requiere ... reintentos, ¿verdad?Cómo manejar ERROR_RECOGNIZER_BUSY

El problema es que este error es muy documentada, así que obviamente tengo preguntas que tal vez alguien con más experiencia en el campo es capaz de responder:

  1. Lo que desencadena un error de este tipo? ¿Es realmente solo servidor ocupado (en Google)? o esto también podría indicar un error en mi aplicación?
  2. ¿Tengo que cerrar explícitamente/volver a abrir una sesión antes de volver a intentarlo?
  3. ¿Con qué frecuencia volver a intentarlo? una vez cada 1-second? cada 5 segundos? ¿Otro?

Sus ideas con experiencia son bienvenidas. Gracias.

+1

¿Puedes publicar el código que estás utilizando para interactuar con el SpeechRecognizer? –

Respuesta

4

No estoy 100% seguro de esto, sin embargo, dado que ha pasado tanto tiempo desde su publicación, puedo intentarlo. Parece que está haciendo algo mal en el código. Como dijo el comentarista, sería útil si publicara el código que devuelve este error. Sin embargo, en el código fuente para el servicio de reconocimiento de voz de Android se encuentra aquí:

http://source-android.frandroid.com/frameworks/base/core/java/android/speech/RecognitionService.java tenemos una función llamada dispatchStopListening que parece poner fin al proceso de escucha. Sin embargo, antes de que realmente lo termina, hay un par de cheques para los estados ilegales, incluyendo esta:

else if (mCurrentCallback.mListener.asBinder() != listener.asBinder()) { 
      listener.onError(SpeechRecognizer.ERROR_RECOGNIZER_BUSY); 
      Log.w(TAG, "stopListening called by other caller than startListening - ignoring"); 
     } 

Esto parece dar a entender que usted está tratando de poner fin al proceso de escucha por algún otro tipo de lo que empezó con, que plantea este error. Espero que esto ayude, pero sería extremadamente beneficioso si publicaras el código.

0

ERROR_RECOGNIZER_BUSY a menudo se lanza cuando ya está utilizando el objeto SpeechRecognizer. (O no cerró uno de manera adecuada).

0

Simplemente agregue el paquete a su intención de reconocimiento y debería funcionar. Eso es lo que hice.

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
... 
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "com.package.name"); 
0

La causa más probable de ERROR_RECOGNIZER_BUSY es que no se ha detenido el servicio de reconocimiento desde el hilo principal y se ignoró el error arrojado.