android – Can I keep the speech recognizer listening indefinitely?-ThrowExceptions

Exception or error:

When I call the startListening method of a SpeechRecognizer object, the speech recognizer starts listening for speech. I would like to create a service that is waiting for speech of a specific keyword: when the user says this keyword and the speech recognizer detects this keyword, then the service becomes ready to receive user voice commands.

To this end, after a new SpeechRecognizer instantiated, I should call its startListening method: can I keep the speech recognizer listening indefinitely?

How to solve:

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);
}

Leave a Reply

Your email address will not be published. Required fields are marked *