Est-ce RecognitionListener.onError () automatiquement SpeechRecognizer.cancel ()?
-
27-10-2019 - |
Question
Pour diverses raisons, je dois utiliser l'API SpeechRecognizer
brut au lieu du RecognizerIntent
plus facile (de RECOGNIZE_SPEECH) activité .
Cela signifie, entre autres choses, que je dois poignée RecognitionListener.onError()
moi-même.
En réponse à quelques-unes des erreurs, je veux simplement re-commencer à écouter. Cela semble simple, mais quand je viens d'appeler SpeechRecognizer.startListening()
en cas d'erreur, cela semble parfois déclencher deux erreurs différentes:
ERROR/ServerConnectorImpl(619): Previous session not destroyed
et
"concurrent startListening received - ignoring this call"
Ce qui laisse entendre que je aurais dû faire un nettoyage avant de tenter de nouveau appel SpeechRecognizer.startListening()
.
Si cela est vrai, cela signifie que sur une erreur de RecognitionListener, l'écoute est pas automatiquement arrêté et / ou annulé.
Il est également possible que certaines erreurs ne se arrêtent / annuler l'écoute, tandis que d'autres ne le font pas. Il y a vraiment seulement 9 erreurs SpeechRecognizer :
- ERROR_NETWORK_TIMEOUT
- ERROR_NETWORK
- ERROR_AUDIO
- ERROR_SERVER
- ERROR_CLIENT
- ERROR_SPEECH_TIMEOUT
- ERROR_NO_MATCH
- ERROR_RECOGNIZER_BUSY
- ERROR_INSUFFICIENT_PERMISSIONS
Étant donné que la documentation ne sont pas très détaillées sur l'erreur qui annule l'écoute et qui n'a pas, ne vous connaissez, en fonction de votre expérience, quelles erreurs ont besoin de faire le nettoyage (et dans quelle mesure) avant d'essayer à nouveau SpeechRecognizer.startListening()
?
La solution
Non, cancel
n'est pas appelée lorsque onError
est invoquée. Vous pouvez regarder la source ici
Autres conseils
vous pouvez détruire la session en cours par destroy (). Et vous pouvez le redémarrer à nouveau
En fait Femi, certaines des conditions d'erreur ne vous arrêtez le service de transcription d'une écoute (SpeechRecognizer.ERROR_SPEECH_TIMEOUT par exemple). Il ne faut pas appeler détruire, juste startlistening à nouveau.