11

さまざまな理由から、より簡単な(RECOGNIZE_SPEECH)アクティビティSpeechRecognizerではなく、生の APIを使用する必要があります。RecognizerIntent

それは、とりわけ、私がRecognitionListener.onError()自分自身を処理する必要があることを意味します。

いくつかのエラーに対応して、私は単にリスニングを再開したいだけです. これは単純に見えますがSpeechRecognizer.startListening()、エラーを呼び出すと、2 つの異なるエラーが発生することがあります。

 ERROR/ServerConnectorImpl(619): Previous session not destroyed

"concurrent startListening received - ignoring this call"

もう一度電話をかける前に、クリーンアップを行う必要があったことを示唆していますSpeechRecognizer.startListening()

これが true の場合、RecognitionListener エラーが発生しても、リッスンが自動的に停止またはキャンセルされないことを意味します。

また、リスニングを停止/キャンセルするエラーもあれば、そうでないエラーもあります。SpeechRecognizer のエラーは、実際には 9 つしかありません。

  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 を呼び出す必要はありません。startlistening を再度実行するだけです。

于 2012-03-15T23:22:40.227 に答える