2011-05-01 15 views
11

さまざまな理由から、の代わりにraw SpeechRecognizer APIを使用する必要があります。RecognizerIntent(RECOGNIZE_SPEECH)activityRecognitionListener.onError()は自動的にSpeechRecognizer.cancel()を行いますか?

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

いくつかのエラーに対応して、私は単にリスニングを再開したいと考えています。これは簡単に見えますが、私はちょうど、エラー時にSpeechRecognizer.startListening()を呼び出すときに、これは時々二つの異なるエラートリガするようだ:

ERROR/ServerConnectorImpl(619): Previous session not destroyed 

と私はSpeechRecognizer.startListening()を呼び出そうとする前に、いくつかのクリーンアップを行っている必要があることをほのめかす

"concurrent startListening received - ignoring this call" 

を再び。

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

リスニングを停止/キャンセルする場合や、リスニングを中止する場合があります。

  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. :本当にわずか9 SpeechRecognizerエラーがあります。ドキュメントはどのエラーが聞いてキャンセルしない、あなたはエラーがクリーンアップを行う必要あなたの経験に基づいて、知って起こるのか、非常に詳細ではありませんので
  10. ERROR_INSUFFICIENT_PERMISSIONS

(とどの程度まで) の前にSpeechRecognizer.startListening()をもう一度試してみますか?

+0

多くの人がここで返信することは十分に知っています。私はあなたが答えを待つ代わりに、エラーをキャッチし、それに応じてLog.wを試してみることをお勧めします。どのエラーをクローズするかを知ることができます。 – SuhailSherif

答えて

2

いいえ、onErrorが呼び出されたときにcancelが呼び出されません。ソースhereを見ることができます。

1

あなたはdestroy()によって現在のセッションを破壊することができます。もう一度やり直すことができます

1

実際にFemiでは、いくつかのエラー条件により、トランスクリプションサービスがリッスンを停止します(SpeechRecognizer.ERROR_SPEECH_TIMEOUTなど)。 destroyを呼び出す必要はなく、ただちに再度開始します。

+0

実際に@Shroud、[ソースコード](http://hi-android.info/src/android/speech/SpeechRecognizer.java.html)を見れば私のオリジナルの質問に載っていますが、 SpeechRecognizer.ERROR_SPEECH_TIMEOUT'は他のエラーとは異なる処理をしません。すべてのエラーは 'mInternalHandler.handleMessage()'によって 'mInternalListener.onError()'に中継されます。これはそれを 'メッセージに中継する。取得(mInternalHandler、MSG_ERROR、エラー).sendToTarget(); '。トランスクリプションサービスをどこに浸しているのが見えますか? – srf

関連する問題