我想在 Text To Speech 停止后立即启动语音识别。以下是我采取的步骤。
第 1 步:初始化语音识别。
mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
mSpeechRecognizer.setRecognitionListener(recognitionListener);
mSpeechRecognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE,
Locale.getDefault());
步骤 2:初始化文本到语音。
TextToSpeech myTTS = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if(myTTS.getEngines().size() == 0){
Toast.makeText(Robo.this,"No Engines Installed",Toast.LENGTH_LONG).show();
}else{
if (status == TextToSpeech.SUCCESS){
//Toast.makeText(MainActivity.this,"Status working.",Toast.LENGTH_LONG).show();
//message = "How may i help you.";
myTTS.setLanguage(Locale.US);
ttsInitialized();
speak("what is your name.");
}
}
}
});
步骤 3:初始化 Utterance Listener 以检查 Speech 是否完成。
myTTS.setOnUtteranceProgressListener(new UtteranceProgressListener() {
@Override
public void onStart(String utteranceId) {
}
@Override
public void onDone(String utteranceId) {
//btn.performClick();
myTTS.shutdown();
mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
}
@Override
public void onError(String utteranceId) {
}
});
在 onDone() 方法中 mSpeechRecognizer.startListening(mSpeechRecognizerIntent); 用于启动语音识别,但不启动语音识别。请看问题。
正如@Regulus 所说,我添加了一个 Handler 并且它起作用了。
@Override
public void onDone(String utteranceId) {
Handler mainHandler = new Handler(Looper.getMainLooper());
Runnable myRunnable = new Runnable() {
@Override
public void run() {
mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
} // This is your code
};
mainHandler.post(myRunnable);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句