Ответ 1
Нет, cancel
не вызывается при вызове onError
. Вы можете посмотреть источник здесь.
По различным причинам мне нужно использовать raw SpeechRecognizer
API вместо более простого 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 ошибок:
Поскольку документация не очень подробно описывает, какая ошибка отменяет прослушивание, а какая нет, знаете ли вы, основываясь на своем опыте, какие ошибки требуют очистки (и в какой степени), прежде чем повторять попытку SpeechRecognizer.startListening()
Нет, cancel
не вызывается при вызове onError
. Вы можете посмотреть источник здесь.
вы можете уничтожить текущий сеанс командой destroy(). И вы можете снова перезапустить его.
Фактически Femi, некоторые из условий ошибки DO останавливают прослушивание службы транскрипции (например, SpeechRecognizer.ERROR_SPEECH_TIMEOUT). Нет необходимости называть destroy, просто запускать снова.