Pregunta

En mi aplicación basada en el reconocimiento de voz, a veces recibo error_recognizer_busy. Intuitivamente, esto requiere ... reintentos, ¿Correcto?

El problema es que este error es muy indocumentado, por lo que obviamente tengo preguntas que tal vez alguien con más experiencia en el campo puede responder:

  1. ¿Qué desencadena tal error? ¿Es realmente solo un servidor ocupado (en Google)? ¿O esto también podría insinuar un error en mi aplicación?
  2. ¿Tengo que cerrar/reabrir explícitamente una sesión antes de volver a intentarlo?
  3. ¿Con qué frecuencia volver a intentarlo? una vez cada 1 segundo? cada 5 segundos? ¿Otro?

Sus ideas experimentadas son muy bienvenidas. Gracias.

¿Fue útil?

Solución

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

http://source-antroid.frandroid.com/frameworks/base/core/java/android/speech/recognitionservice.javaTenemos una función llamada dispatchStopListening que parece terminar el proceso de escucha. Sin embargo, antes de que realmente lo termine, hay algunos controles por estados ilegales, incluido esto:

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 implicar que está tratando de terminar el proceso de escucha de otro tipo de lo que lo comenzó, lo que plantea este error. Espero que esto ayude, pero sería extremadamente beneficioso si publicaras el código.

Otros consejos

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

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

ERROR_RECOGNIZATER_BUSY A menudo se arroja cuando ya está en uso del objeto SpireRecognizer. (O no cerró uno de manera propiamente).

La causa más probable de error_recognizer_busy es que no ha detenido el servicio de reconocimiento del hilo principal y se ignoró el error lanzado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top