我正在使用 TextToSpeech 类的android,但当我instantiate
它在方法TTS doesnt work
中时,但如果我在onCreate()
方法中声明它,它就可以工作。
(请注意,我的应用程序在两种情况下均可运行)
为什么会这样?
我听说在其中实例化类是一个好习惯 方法,如果没有其他方法使用它。
更新
代码:
TextToSpeech t1;
public void speak(View v){
Log.i(TAG,"speak method");
t1=new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if(status != TextToSpeech.ERROR){
t1.setLanguage(Locale.UK);
}
}
});
t1.speak("I m speaking out dude",TextToSpeech.QUEUE_FLUSH,null);
}
答案 0 :(得分:0)
创建TextToSpeech实例后,初始化文字转语音引擎。这是一个异步操作。初始化完成后调用OnInitListener(第二个参数)。根据初始化状态,状态可以是TextToSpeech.SUCCESS或TextToSpeech.ERROR。
由于它是异步的,因此完成其操作需要一些时间。
所以,这是答案,
当您在onCreate上创建实例时,引擎会在您调用“speak(String str)”之前获得初始化时间,并且它可以正常工作。但是当你在方法本身内部创建实例时,TTS引擎在Speak之前没有时间完成初始化。