2017-08-01 70 views
3

我知道SpeechRecognizer如何在android中工作。我有一个要求,我需要在一段时间后致电SpeechRecognizer.stopListening()方法。但之后,当我再次启动监听器时,它将无法工作。Android SpeechRecognizer没有重新开始

代码开始SpeechRecognizer

private void promptSpeechInput() { 
    /* 
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
      RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault()); 
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT, 
      getString(R.string.speech_prompt)); 
    try { 
     startActivityForResult(intent, REQ_CODE_SPEECH_INPUT); 
    } catch (ActivityNotFoundException a) { 
     Toast.makeText(getApplicationContext(), 
       getString(R.string.speech_not_supported), 
       Toast.LENGTH_SHORT).show(); 
    } 
    */ 

    speechIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    speechIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
    speechIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, context.getPackageName()); 
    // for more: https://stackoverflow.com/questions/7973023/what-is-the-list-of-supported-languages-locales-on-android 
    /*intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en_IN"); */ 
    speechIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault()); 
    speechIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1); 
    speechIntent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS, 200); 
    speechIntent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS, new Long(5000)); 
    speechIntent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS, new Long(5000)); 
    speechIntent.putExtra("android.speech.extra.DICTATION_MODE", false); 
    speechIntent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, false); 
    /* 
    intent.putExtra("android.speech.extra.GET_AUDIO_FORMAT", "audio/AMR"); 
    intent.putExtra("android.speech.extra.GET_AUDIO", true); 
    */ 

    sr.startListening(speechIntent); 
} 

讲的几秒钟后,我使用

sr.stopListening(); 

而且在onResults我试图启动它接收结果之后再次使用

sr.startListening(speechIntent); 

但它不工作。我该怎么做才能使它工作?

EDIT

如果我叫promptSpeechInput();方法而不是sr.startListening(speechIntent);它开始给我SpeechRecognizer.ERROR_RECOGNIZER_BUSY错误重复。

回答

0

您需要再次设置RecognitionListener才能完成此项工作。听起来很奇怪,每当你需要听取用户重置并再次设置听众使其工作时。

如果您正在寻找一个快速解决方案,您可以尝试DroidSpeech,它负责所有繁重的工作。只需几行代码,您就可以很快完成语音识别。

DroidSpeech droidSpeech = new DroidSpeech(this, null); 
droidSpeech.setOnDroidSpeechListener(this); 

要收听用户调用下面的代码,

droidSpeech.startDroidSpeechRecognition(); 

,你会得到的声音结果在监听方法,

@Override 
public void onDroidSpeechFinalResult(String finalSpeechResult, boolean droidSpeechWillListen) 
{ 
    // Do whatever you want with the speech result 
}