我可以让语音识别器无限期地听吗?

时间:2012-04-16 23:00:08

标签: android

当我调用startListening对象的SpeechRecognizer方法时,语音识别器开始侦听语音。我想创建一个等待特定关键字语音的服务:当用户说出此关键字并且语音识别器检测到此关键字时,该服务就可以接收用户语音命令了。

为此,在实例化SpeechRecognizer之后,我应该调用它的startListening方法:我可以让语音识别器无限期地进行监听吗?

2 个答案:

答案 0 :(得分:14)

Android Speech recognizer可以通过意图额外数据进行自定义。请参阅the android documentation

  

public static final String   的 EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS

     

我们停止听到讲话后应该花费的时间   考虑输入完成。 [...]

     

public static final String EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS   自:API等级8

     

话语的最小长度。我们不会停止录制   这段时间。 [...]

     

public static final String EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS

     

我们停止听到讲话后应该花费的时间   考虑输入可能完成。 [...]

EXTRA_LANGUAGE_MODEL设置为网络搜索,仅捕获相关字词。

答案 1 :(得分:0)

您可以像这样实现onError RecognitionListener接口。它会不断听你的活动。

@Override
public void onError(int error) {
    String errorMessage = getErrorText(error);
    Log.i(Constants.TAG, "FAILED " + errorMessage);
    speech.destroy();
    speech = null;
    StartListening();
}

private void StartListening() {
    speech = SpeechRecognizer.createSpeechRecognizer(this);
    speech.setRecognitionListener(this);
    recognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "en");
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, this.getPackageName());
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 3);

    //if setting.SpeechEnable
    speech.startListening(recognizerIntent);
}