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:

  1. Error_network_timeout
  2. Error_network
  3. Error_audio
  4. Error_server
  5. Error_client
  6. Error_speech_timeout
  7. Error_no_match
  8. Error_recognizer_busy
  9. 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?

¿Fue útil?

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.

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