6

私はRecognitionListenerクラスを使用してユーザーの声を聞くAndroidアプリケーションを改善しています。ここでは、以下の結果が得られます。

1-)ユーザーがマイクアイコンをクリックして何か問題がないと言った場合2-)ユーザーがマイクアイコンをクリックしてもう一度マイクアイコンをクリックするか、何も言わなかった場合 、エラーが発生し、エラータイプは次のとおりです:ERROR_RECOGNIZER_BUSY

 @Override
 public void onError(int error) {
 if ((error == SpeechRecognizer.ERROR_NO_MATCH)
  || (error == SpeechRecognizer.ERROR_SPEECH_TIMEOUT)){

  }  
  else if(ERROR_RECOGNIZER_BUSY){
  }

}

リスニングを開始するための私のコードは次のとおりです。

 public void recognizeSpeechDirectly()
     {


        recognizer = SpeechRecognizer.createSpeechRecognizer(this.context);
        recognizer.setRecognitionListener(this);
        recognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "org.twodee.andytest");
        recognizerIntent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true);
        recognizer.startListening(recognizerIntent);

     }

ERROR_RECOGNIZER_BUSYが表示されたら、リスニングを再開したいのですが、

別の男がstackoverflowでこのエラーについて話しましたが、それは私には明確ではなく、実装できません。

ERROR_RECOGNIZER_BUSYの処理方法

前もって感謝します

4

2 に答える 2

1

ユーザーがボタンをクリックしてもう一度クリックすると、startListeningを 2 回呼び出すため、ERROR_RECOGNIZER_BUSYが発生します。次のようにコードを変更します。

// class member
private boolean mIsListening;  
@Override
protected void onCreate(Bundle savedInstanceState)
{
    .........
    recognizer = SpeechRecognizer.createSpeechRecognizer(this.context);
    recognizer.setRecognitionListener(this);
    recognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "org.twodee.andytest");
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true);
}

そして、アイコンをクリックすると

if (!mIslistening)
{
    mIsListening = true;        
    recognizer.startListening(recognizerIntent);
}  

@Override
public void onError(int error) {
 if ((error == SpeechRecognizer.ERROR_NO_MATCH)
  || (error == SpeechRecognizer.ERROR_SPEECH_TIMEOUT)){

  }  
  else if(ERROR_RECOGNIZER_BUSY){

  }
  recognizer.startListening(recognizerIntent);
}  

@Override
    public void onPartialResults(Bundle partialResults)
    {
        mIsListening = false;
         ..........
    }  

@Override
    public void onResults(Bundle results)
    {
        mIsListening = false;
          ..........
    }
于 2013-03-16T18:59:29.093 に答える
0

次のようにして認識を開始します。

public void stopRecognition(){
      recognizer.destroy();
      recognizer = null;

}

public void onError(int error) {
      stopRecognition();
}

public void onResults(Bundle results){
      //Do something
      stopRecognition();
}

「認識サービスに接続されていません」および 「ERROR_RECOGNIZER_BUSY」エラーを修正するために機能します

于 2016-04-13T07:00:17.763 に答える