さまざまな理由から、より簡単な(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 つしかありません。
- ERROR_NETWORK_TIMEOUT
- ERROR_NETWORK
- ERROR_AUDIO
- ERROR_SERVER
- ERROR_CLIENT
- ERROR_SPEECH_TIMEOUT
- ERROR_NO_MATCH
- ERROR_RECOGNIZER_BUSY
- ERROR_INSUFFICIENT_PERMISSIONS
どのエラーがリッスンをキャンセルし、どのエラーがキャンセルしないかについて、ドキュメンテーションにはあまり詳しく説明されていないため、経験に基づいて、再試行する前SpeechRecognizer.startListening()
にクリーンアップが必要なエラー (およびその程度) を知っていますか?