当导航抽屉中的片段发生变化时,Text to Speech 不会停止

Text to Speech doesn't stop when fragment changes in navigation drawer

在我的项目中,我使用带片段的导航抽屉。在第一个屏幕(第一个片段)中,我有一个仪表板。在第二个片段中,我在点击按钮时有大量文本的 tts。它工作正常并且停止正常,只有当片段回到第一个片段(仪表板)时。

问题:当通过在导航菜单中选择来更改片段时,tts 不会stop.Even我转到下一个片段,tts 正在播放。

我使用了 onDestroy()、onPause()、onResume()、onStop()。没有任何效果。

@Override
public void onDestroy() { //same for other methods also
    super.onDestroy();
    if (tts != null) {
        tts.stop();
        tts.shutdown();
    }
}

我在片段堆栈中使用添加

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.add(R.id.container, fragment,back_stack_name);
transaction.addToBackStack(back_stack_name);
transaction.commit();

我也遇到过同样的问题,一段文字一旦开始,就好像停不下来了。

一种可能是使用 synthesizeToFile 功能创建 TTS 输出的音频文件,这样您就可以更好地控制播放。

另一种可能性(我已经实现)是将文本分成更小的部分(我只是使用句号 .)并使用 UtteranceProgressListener 一个接一个地播放这些文本的 onDone 方法(完成一个部分后,播放下一个)。听起来是一样的,当您可以通过在 n 部分播放后不播放 n+1 部分来手动停止播放时。 丑陋的解决方法,我知道。