Java TextToSpeech stop()不工作

Java TextToSpeech stop()不工作,java,android,text-to-speech,Java,Android,Text To Speech,当按下后退按钮时,我正试图停下来。但即使我关闭应用程序,语音也不会停止。只有当我清除缓存时,语音才会停止。我怎样才能解决这个问题?请帮我理解 private boolean mShouldSpeak = true; TextToSpeech tts; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R

当按下后退按钮时,我正试图停下来。但即使我关闭应用程序,语音也不会停止。只有当我清除缓存时,语音才会停止。我怎样才能解决这个问题?请帮我理解

private boolean mShouldSpeak = true;
TextToSpeech tts;
 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_cat);

    tts = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
        @Override
        public void onInit(int status) {
            if (status == TextToSpeech.SUCCESS) {
                tts.setEngineByPackageName(enginePackageName);
                tts.setLanguage(Locale.getDefault());
                tts.setPitch(0);
                tts.setSpeechRate(1);
               speak();
            }
        }
    });
}
 private void speak() {

    if (mShouldSpeak == true)
    {
        tts.speak("Автор: " +getResources().getString(R.string.catAuthor), TextToSpeech.QUEUE_ADD, null);
        tts.playSilence(1000, TextToSpeech.QUEUE_ADD, null);
        tts.speak(getResources().getString(R.string.catName), TextToSpeech.QUEUE_ADD, null);
        tts.playSilence(1000, TextToSpeech.QUEUE_ADD, null);
        tts.speak(getResources().getString(R.string.catDesc), TextToSpeech.QUEUE_ADD, null);
        tts.playSilence(1000, TextToSpeech.QUEUE_ADD, null);
    }

}
 @Override
protected void onDestroy() {
    if (tts != null)
    {
        tts.stop();
        tts.shutdown();
    }
    super.onDestroy();
}
public void onBackPressed() {

    onDestroy();
    super.onBackPressed();

}
}


活动暂停时停止讲话

可能您正在创建大量对象?那么可能是您停止了错误的
tts

尝试一个简单的方法

if (tts == null) {
    tts = new TextToSpeech(...) {...}
}

只有在对象不存在时才初始化它。

这样修改,这对我来说通常是有效的:我相信您正在使用多个对象,即使您不认为您正在使用。这是一个普遍的问题

@Override
    protected void onStop()
    {
        super.onStop();

        if(tts != null){
            tts.shutdown();
        }       
    }

除了这些评论之外,您还需要确保:

tts.setEngineByPackageName(enginePackageName)

包含设备上安装的文本语音引擎的有效包名,例如
com.google.android.tts
com.svox.pico

要查看有关已安装发动机的信息,请参阅我的答案


不应用此参数将绑定文本到语音设置中选择为设备默认值的引擎。

Tnx以获取建议,但它只是一个TextToSpeech对象。当我停止缓存中的“语音合成器Google”进程时,TTS停止。如何以编程方式停止此过程?您的
tts.stop()
是否返回
TextToSpeech.ERROR
(-1)或
TextToSpeech.SUCCESS
(0)?您好,tts.stop()返回成功(0)添加登录
onDestroy
-它是否到达
tts.stop()
,或者tts对象已为空?否,尚未为空。有TextToSpeech@5089在调试中。您在
setEngineByPackageName()
中使用的是哪个TTS引擎-您是否尝试过另一个以确保它不是引擎的问题?理想情况下,在进行故障排除之前,您确实需要正确、全面地使用TTS API。如果不这样做,可能会引起问题。添加正确的bundle/map参数,一个话语id,并分配一个
话语进程监听器
,这样你就可以记录语音进程,看看是否有人试图打断它。天哪,我真蠢。你完全正确。我刚开始学安卓,知道的不多。并非所有正在研究的例子都能给出全面的答案。你真的帮了大忙,非常感谢!很高兴你整理好了-我们都是初学者。。。我的哪一个建议是解决方案?我会把它作为一个答案我只是。。。无法理解,抱歉:c为什么会发生这种情况?如何解决这个问题?因为它仍然不起作用。我做错了什么?
@Override
    protected void onStop()
    {
        super.onStop();

        if(tts != null){
            tts.shutdown();
        }       
    }