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); ;
}
期待どおりに動作しますが、以下の 2 つのケースでは失敗します。どちらの場合も、「ヘルプ音声」が繰り返し聞こえますが、「停止ボタン」を押しても停止できませんでした。
画面が回転するとttsオブジェクトがシャットダウンされ、画面が回転した後、ttsオブジェクトが復元されると思います。「runOnUiThread」からのリクエストが継続しているため、「ヘルプ音声」が引き続き聞こえます。しかし、「停止ボタン」を押しても停止できないことがわかりました。上記のコードを見て、どこが間違っているのか教えてください。ありがとう!