¿ReconoceNitionListener.oNerror () automáticamente SpeechRecognizer.cancel ()?
-
27-10-2019 - |
Pregunta
Por varias razones, necesito usar el crudo SpeechRecognizer
API en lugar de lo más fácil RecognizerIntent
(Reconocer_speech) actividad.
Eso significa, entre otras cosas, que necesito manejar RecognitionListener.onError()
mí mismo.
En respuesta a algunos de los errores, simplemente quiero reiniciar la escucha. Esto parece sencillo pero cuando solo llamo SpeechRecognizer.startListening()
Al error, esto a veces parece desencadenar dos errores diferentes:
ERROR/ServerConnectorImpl(619): Previous session not destroyed
y
"concurrent startListening received - ignoring this call"
Qué sugiere que debería haber hecho un poco de limpieza antes de intentar llamar SpeechRecognizer.startListening()
otra vez.
Si esto es cierto, significa que en un error de reconocimiento, la escucha no se detiene y/o cancela automáticamente.
También es posible que algunos errores se detengan/cancelen la escucha, mientras que otros no. En realidad solo hay 9 Recribio de discurso Errores:
- Error_network_timeout
- Error_network
- Error_audio
- Error_server
- Error_client
- Error_speech_timeout
- Error_no_match
- Error_recognizer_busy
- ERROR_INSUFIENT_PERMISSIONS
Dado que la documentación no es muy detallada sobre qué error cancela la escucha y cuál no, ¿sabe, según su experiencia, qué errores requieren hacer limpieza (y qué medida) antes de intentando SpeechRecognizer.startListening()
¿otra vez?
Solución
No, cancel
no se llama cuando onError
se invoca. Puedes mirar la fuente aquí.
Otros consejos
Puedes destruir la sesión actual por destruir (). Y puedes reiniciarlo de nuevo
En realidad, FEMI, algunas de las condiciones de error evitan que el servicio de transcripción escuche (SpeechRecognizer.error_speech_timeout, por ejemplo). No es necesario llamar a destruir, simplemente comienza a incluir nuevamente.