2012-03-07 5 views
1

TTSエンジンを使用するアプリケーションを開発しました。TTSエンジンが初期化されなくなるまで現在のアクティビティをブロックする方法

問題は、私はTTSエンジンが初期化されるまで待つ必要があります。私はsleepメソッドを使っていますが、うまくいきません。ここ

は私が後に現在の活動を再開するために、コードのきちんとしたブロックを書き込むことができますどのようにinitialized.so
私は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エンジンは、TTS
が初期化されているかどうかをループでチェックするためのハードコーディングを行う代わりに、初期化されています(これを行う方法もわかりません)。

Iは

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

方法を使用する場合、アプリケーションの状態が非応答と投げNULLポインタ例外

に実行されています。だから私にこの問題を解決するための解決策を提案してください。私はグーグルでは、しかし、適切な答えを見つけることができませんでした。

+0

誰か..私はできるだけ早く – siva

+0

男としてそれを必要としますあなたがこの問題を見るなら、ヒラル。私はチャットの特権を得ました。 – siva

答えて

0

使用AsyncTask TTSエンジンを起動すると、あなたがonPostExecuteが呼ばれたときにそれが行われている知っている。この問題にいくつかの光を投げてください

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

+0

私はTTSエンジンの初期化を同期させなければならないと思いますが、TTSエンジンがバックグラウンドプロセスとして実行されると、現在のアクティビティがそのまま進行してException.amを返します。私が間違っているなら私。 – siva