Can I keep the speech recognizer listening indefinitely?
The Android Speech recognizer
can be customized through the intent extra data. See the android documentation.
public static final String EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS
The amount of time that it should take after we stop hearing speech to consider the input complete. [...]
public static final String EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS Since: API Level 8
The minimum length of an utterance. We will not stop recording before this amount of time. [...]
public static final String EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS
The amount of time that it should take after we stop hearing speech to consider the input possibly complete. [...]
Set the EXTRA_LANGUAGE_MODEL to websearch to capture only relevant words.
You can implement onError
of RecognitionListener
interface like this. It is continuously listening in your activity.
@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);
}