当事件发生时,我在onUteranceComplete()
方法中连续调用文本到语音speak()。说话方法工作正常,它不断地说文本,但我在这个代码中面临一个奇怪的问题。当事件结束时,我调用textToSpeech.stop()
方法,但是说话方法一直在说话,似乎stop()根本不起作用。我想这个问题正在发生,因为在onUteranceCOmplete()中连续调用speak()。
您的专家认为,这个问题的原因是什么?
@Override
public void onInit(int status) {
if(status != TextToSpeech.ERROR)
{
Toast.makeText(getApplicationContext(), "text to speech created", Toast.LENGTH_SHORT).show();
tts.setLanguage(Locale.US);
tts.setPitch(1.2f);
tts.setSpeechRate(1.0f);
tts.setOnUtteranceCompletedListener(new OnUtteranceCompletedListener() {
@Override
public void onUtteranceCompleted(String arg0) {
// TODO Auto-generated method stub
tts.speak("hello world", TextToSpeech.QUEUE_FLUSH, hash);
}
});
}
@Override
public void onCallStateChanged(int state, final String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
....
x = tts.speak("hello world", TextToSpeech.QUEUE_FLUSH, hash);
}
此致
答案 0 :(得分:1)
您应该设置一个类成员标志
private boolean mShouldSpeak = true;
然后检查onUtteranceCompleted
中的标志tts.setOnUtteranceCompletedListener(new OnUtteranceCompletedListener() {
@Override
public void onUtteranceCompleted(String arg0) {
// TODO Auto-generated method stub
if (mShouldSpeak)
{
tts.speak("hello world", TextToSpeech.QUEUE_FLUSH, hash);
}
}
});
事件结束后,只需设置mShouldSpeak to false