如何阻止当前活动直到TTS引擎未初始化

时间:2012-03-07 09:21:35

标签: android

我开发了一个必须使用TTS引擎的应用程序。

现在的问题是我需要等到TTS引擎初始化,虽然我使用的是睡眠方法,但效果不佳。

这是我的代码

public void onCreate(Bundle savedInstanceState) {

    ......

    Intent checkin = new Intent();
    checkin.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
    startActivityForResult(checkin, MY_DATA_CHECKCODE1);
    //l.setOnTouchListener(this);

    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

     tts.speak("Enter sms", TextToSpeech.QUEUE_FLUSH, null);

}


protected void onActivityResult(int requestCode, int resultCode, Intent data) {


if (requestCode == MY_DATA_CHECKCODE) {

if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {

// success, create the TTS instance

tts = new TextToSpeech(this, this);

tts.setLanguage(Locale.US);

tts.setSpeechRate((float) 0.4);


        } 
    }

}

而不是以上睡眠方法我需要等到TTS引擎不是 initialized.so如何编写一个整齐的代码块来恢复当前的活动 TTS引擎已初始化,而不是进行硬编码以检查循环是否为TTS
已初始化。(我甚至不知道如何做到这一点)。

应用程序运行到非响应状态并抛出Null指针异常

当我使用

tts.speak("Enter sms", TextToSpeech.QUEUE_FLUSH, null);

方法。所以请建议我解决这个问题的方法。我用Google搜索但找不到合适的答案。

1 个答案:

答案 0 :(得分:0)

使用AsyncTask启动TTS引擎,您将在调用onPostExecute时知道它已完成:

http://developer.android.com/reference/android/os/AsyncTask.html