在哪里实例化TextToSpeech类?

时间:2015-07-03 12:06:06

标签: android text-to-speech

我正在使用 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);
    }

1 个答案:

答案 0 :(得分:0)

创建TextToSpeech实例后,初始化文字转语音引擎。这是一个异步操作。初始化完成后调用OnInitListener(第二个参数)。根据初始化状态,状态可以是TextToSpeech.SUCCESS或TextToSpeech.ERROR。

由于它是异步的,因此完成其操作需要一些时间。

所以,这是答案

当您在onCreate上创建实例时,引擎会在您调用“speak(String str)”之前获得初始化时间,并且它可以正常工作。但是当你在方法本身内部创建实例时,TTS引擎在Speak之前没有时间完成初始化。