Есть ли RecognitionListener.onError () автоматически SpeechRecognizer.cancel ()? - PullRequest
11 голосов
/ 01 мая 2011

По разным причинам мне нужно использовать простой 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 ошибок:

  1. ERROR_NETWORK_TIMEOUT
  2. ERROR_NETWORK
  3. ERROR_AUDIO
  4. * ERROR_SERVER
  5. ERROR_SPEECH_TIMEOUT
  6. ERROR_NO_MATCH
  7. ERROR_RECOGNIZER_BUSY
  8. ERROR_INSUFFICIENT_PERMISS______ * * * * * * * * * * * * * * * * * * * * * * 10 * * * * * * * 10 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 10 *.отменяет прослушивание, а какие нет, знаете ли вы, исходя из своего опыта, какие ошибки требуют очистки (и в какой степени) до попытки SpeechRecognizer.startListening() снова?

Ответы [ 3 ]

2 голосов
/ 11 июня 2011

Нет, cancel не вызывается при вызове onError. Вы можете посмотреть на источник здесь .

1 голос
/ 16 марта 2012

На самом деле, Феми, некоторые из состояний ошибки НЕ позволяют остановить прослушивание службы транскрипции (например, SpeechRecognizer.ERROR_SPEECH_TIMEOUT). Не нужно вызывать уничтожение, просто начните снова.

1 голос
/ 15 декабря 2011

Вы можете уничтожить текущую сессию с помощью destroy (). И вы можете перезапустить его снова

...