11

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

这意味着,除此之外,我需要处理好RecognitionListener.onError()自己。

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

 ERROR/ServerConnectorImpl(619): Previous session not destroyed

"concurrent startListening received - ignoring this call"

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

如果这是真的,则意味着在出现 RecognitionListener 错误时,侦听不会自动停止和/或取消。

也有可能某些错误会停止/取消侦听,而其他错误则不会。实际上只有 9 个SpeechRecognizer错误:

  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_INSUFFICIENT_PERMISSIONS

由于文档没有非常详细地说明哪些错误会取消收听,哪些不会,根据您的经验,您是否碰巧知道哪些错误需要在再次尝试之前SpeechRecognizer.startListening()进行清理(以及在何种程度上) ?

4

3 回答 3

2

不,cancel在调用时onError不调用。你可以在这里查看源代码。

于 2011-06-11T15:02:17.077 回答
1

您可以通过 destroy() 销毁当前会话。你可以重新启动它

于 2011-12-14T20:04:03.747 回答
1

实际上,Femi,一些错误情况确实会停止转录服务的监听(例如,SpeechRecognizer.ERROR_SPEECH_TIMEOUT)。没必要调用destroy,再听一遍就行了。

于 2012-03-15T23:22:40.227 回答