Существует несколько подходов к этому.
Использование таймера Вы можете использовать какой-то таймер обратного отсчета для пользователя.В этом посте обсуждается эта идея подробнее: SpeechRecognizer Time Limit .В этом посте предлагается следующее:
Лучше всего было бы использовать какой-нибудь таймер, например, CountDownTimer:
yourSpeechListener.startListening(yourRecognizerIntent);
new CountDownTimer(2000, 1000) {
public void onTick(long millisUntilFinished) {
//do nothing, just let it tick
}
public void onFinish() {
yourSpeechListener.stopListening();
} }.start();
Вы можете использовать EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS RecognizerIntent
С его помощью можно контролировать уровень молчания, который распознаватель должен услышать перед остановкой.Есть два параметра, которые могут работать в такой ситуации:
EXTRA_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS
или EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS
Оба служат почти одной и той же цели, если есть complete_silence для 100 мс или, возможно, для 200 мс, тогдараспознаватель прекратит прослушивание и впоследствии обработает только что услышанное слово.Например:
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS, 2000000);
или
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS, 2000000);