android - studio - fragment interaction listener
Cómo manejar ERROR_RECOGNIZER_BUSY (4)
En mi aplicación basada en el reconocimiento de voz, a veces recibo ERROR_RECOGNIZER_BUSY. Intuitivamente, esto requiere ... reintentos , ¿verdad?
El problema es que este error es muy poco documentado, por lo que obviamente tengo preguntas que quizás alguien con más experiencia en el campo pueda responder:
- ¿Qué desencadena tal error? ¿Es realmente solo servidor ocupado (en Google)? ¿O esto también podría insinuar un error en mi aplicación?
- ¿Tengo que cerrar / reabrir una sesión explícitamente antes de volver a intentarlo?
- ¿Con qué frecuencia volver a intentarlo? una vez cada 1 segundo? cada 5 segundos? ¿Otro?
Sus conocimientos experimentados son bienvenidos. Gracias.
ERROR_RECOGNIZER_BUSY a menudo se lanza cuando ya está utilizando el objeto SpeechRecognizer. (O usted no cerró uno adecuadamente).
La causa más probable de ERROR_RECOGNIZER_BUSY es que no ha detenido el servicio de reconocimiento desde el subproceso principal y se ignoró el error generado.
No estoy 100% seguro de esto, sin embargo, ya que ha pasado tanto tiempo desde que publicaste, puedo intentarlo. 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 está devolviendo este error. Sin embargo, en el código fuente del servicio de reconocimiento de voz de Android que se encuentra aquí:
http://source-android.frandroid.com/frameworks/base/core/java/android/speech/RecognitionService.java tenemos una función llamada dispatchStopListening
que parece terminar el proceso de escucha. Sin embargo, antes de que realmente lo termine, hay algunos controles para estados ilegales, incluyendo 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á intentando terminar el proceso de escucha con otro tipo de persona con el que comenzó, lo que genera este error. Espero que esto ayude, pero sería extremadamente beneficioso si publicara el código.
Simplemente agregue el paquete a su intento de reconocedor 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");