由于各种原因,我需要使用原始的SpeechRecognizer API而不是更简单的RecognizerIntent(RECOGNIZE_SPEECH)activity

这意味着,除其他外,我需要自己处理RecognitionListener.onError()

针对某些错误,我只是想重新开始收听。这看起来很简单,但是当我仅在出错时调用SpeechRecognizer.startListening()时,有时似乎会触发两个不同的错误:

 ERROR/ServerConnectorImpl(619): Previous session not destroyed


"concurrent startListening received - ignoring this call"

这暗示我应该在尝试再次调用SpeechRecognizer.startListening()之前进行一些清理。

如果为真,则意味着在RecognitionListener错误发生时,监听不会自动停止和/或取消。

某些错误也可能会停止/取消监听,而其他错误则不会。实际上只有9个SpeechRecognizer错误:
  • ERROR_NETWORK_TIMEOUT
  • ERROR_NETWORK
  • ERROR_AUDIO
  • ERROR_SERVER
  • ERROR_CLIENT
  • ERROR_SPEECH_TIMEOUT
  • ERROR_NO_MATCH
  • ERROR_RECOGNIZER_BUSY
  • ERROR_INSUFFICIENT_PERMISSIONS

  • 由于该文档不是很详细地说明哪个错误会取消监听,而哪些不会取消监听,您是否会根据您的经验而知道,哪些错误需要进行清理(以及达到何种程度)才能再次尝试SpeechRecognizer.startListening()

    最佳答案

    不,在调用cancel时不会调用onError。您可以查看源here

    10-08 18:24