我有一个 TTS 对象。此 TTS 对象重复单词“帮助”。我有一个布尔标志。当此标志设置为 false 时,while 循环被中断,并且 TTS 对象停止。下面是代码。基本上,tts 在 OnCreate 中启动,在 OnDestroy 中销毁。有一个按钮来启动 tts 和一个按钮来停止 tts。
protected void onCreate(Bundle savedInstanceState) {
....
IniTts();
}
@Override
protected void onDestroy()
{
if (_tts != null)
{
_tts.shutdown();
}
super.onDestroy();
}
public OnBottonPressedStartShutting() {
_tts.speak("help", TextToSpeech.QUEUE_FLUSH, myHashAlarm);
}
public OnBottonPressedStopShutting() {
bContinueTtsPlay = false;
}
public void onUtteranceCompleted(String uttId) {
this.runOnUiThread(new Runnable() {
public void run() {
if (bContinueTtsPlay == true) _tts.speak("help", TextToSpeech.QUEUE_FLUSH, myHashAlarm); ;
}
它按预期工作,但在以下两种情况下失败:1.我旋转屏幕 2.按主页按钮并重新打开暂停的应用程序。在这两种情况下,我发现我仍然可以反复听到“帮助声音”,但我无法通过按下“停止按钮”来停止它。
我想当屏幕旋转时, tts 对象被关闭,屏幕旋转后, tts 对象被恢复。来自“runOnUiThread”的请求继续,因此我仍然可以听到“帮助声音”。但事实证明我无法通过按“停止按钮”来停止它。请查看上面的代码并告诉我错误的逻辑在哪里。谢谢!