问题描述
|
由于各种原因,我需要使用原始的
SpeechRecognizer
API,而不是更简单的RecognizerIntent
(RECOGNIZE_SPEECH)活动。
这意味着,除其他外,我需要自己处理RecognitionListener.onError()
。
针对某些错误,我只是想重新开始收听。这看起来很简单,但是当我在出错时仅调用SpeechRecognizer.startListening()
时,有时似乎会触发两个不同的错误:
ERROR/ServerConnectorImpl(619): PrevIoUs session not destroyed
和
\"concurrent startListening received - ignoring this call\"
这暗示着我应该在尝试再次调用before3 should之前进行一些清理。
如果为真,则意味着在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
由于文档不是很详细地说明哪个错误会取消监听,而哪些不会取消,您是否根据您的经验知道在重新尝试“ 3”之前需要进行清理(以及在何种程度上进行清理)的错误?
解决方法
不,调用
onError
时不会调用cancel
。您可以在这里查看源代码。
,您可以通过destroy()销毁当前会话。您可以再次重新启动它
,实际上是Femi,某些错误条件确实会使转录服务无法监听(例如,SpeechRecognizer.ERROR_SPEECH_TIMEOUT)。不必调用destroy,只需再次开始侦听即可。