TextToSpeech stop()不起作用

时间:2018-01-22 08:41:22

标签: java android text-to-speech

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

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();

}

4 个答案:

答案 0 :(得分:0)

 public void onPause(){
  if(tts !=null){
     tts.stop();
     tts.shutdown();
  }
  super.onPause();

}

停止谈论活动暂停

答案 1 :(得分:0)

也许您正在创建大量TextToSpeech个对象?那么你可能会停止错误的tts

尝试一个简单的

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

仅在对象尚未存在时才初始化。

答案 2 :(得分:0)

这样修改,这通常对我有用:我相信你使用多个TextToSpeech对象,即使你认为不是。这是一个普遍的问题。

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

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

答案 3 :(得分:0)

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

tts.setEngineByPackageName(enginePackageName)

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

要查看有关已安装引擎的信息,请参阅我的回答here

不应用此参数将绑定在“文字转语音设置”中选择作为设备默认值的引擎。