2

I know how the SpeechRecognizer works in the android. I have a requirement that i need to call SpeechRecognizer.stopListening() method after some time. But after that when i start listener again it would not work.

Code to start 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);
}

After few seconds of speaking i do use

sr.stopListening();

And after receiving the results in onResults i am trying to start it again using

sr.startListening(speechIntent);

but its not working. What should i do to make it work ?

EDIT

if I call promptSpeechInput(); method again instead of sr.startListening(speechIntent); it starts giving me SpeechRecognizer.ERROR_RECOGNIZER_BUSY error repeatedly.

Rahul Khurana
  • 8,577
  • 7
  • 33
  • 60

1 Answers1

-1

You would need to again set the RecognitionListener to have this work. As weird it sounds, every time when you need to listen to the user reset and set the listener again to make it work.

If you are looking for a quick solution you can try DroidSpeech, which takes care of all the heavy lifting. With a few lines of code, you will have the speech recognition running perfectly in no time.

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

To start listening to the user call the below code,

droidSpeech.startDroidSpeechRecognition();

And you will get the voice result in the listener method,

@Override
public void onDroidSpeechFinalResult(String finalSpeechResult, boolean droidSpeechWillListen)
{
  // Do whatever you want with the speech result
}
Vikram Ezhil
  • 995
  • 1
  • 9
  • 15