2015-07-03 44 views
-1

我使用文字轉語音類的機器人,但是當我instantiate它的方法TTS doesnt work內,但如果我onCreate()方法內聲明它它的工作原理。 (請注意,我的應用程序在兩種情況下運行)在哪裏實例化TextToSpeech類?

這是爲什麼?

我聽說如果沒有其他方法正在使用它,在 方法中實例化類是一種很好的做法。

更新時間:

代碼:

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); 
    } 
+2

也許向我們展示您的代碼? – Nikola

+6

不要*鏈接*到您的代碼。 **在問題中包含**代碼。該鏈接可能在一年內不可用,但代碼將在SO這裏一樣長。 – 323go

回答

0

創造文字轉語音的實例後,它初始化文本到語音引擎。這是一個異步操作。 OnInitListener(第二個參數)在初始化完成後調用。基於初始化狀態,狀態可以是TextToSpeech.SUCCESS或TextToSpeech.ERROR。

由於這是一個異步,它需要一些時間來完成其操作。

所以,這裏是答案

當你的onCreate創建實例,發動機得到時間進行初始化致電前「說話(字符串str)」和它的作品。但是當在方法本身內創建實例時,TTS引擎在Speak之前沒有時間完成其初始化。

+0

謝謝你......我花了數小時思考和尋找它。 –

相關問題