2012-11-24 33 views
1

我正在一個Android項目上工作,我有一個關於關閉problem.my問題的小問題是我想在關閉應用程序之前使用文本到語音。但它只是關閉,並沒有說話如何可以我解決這個問題situation.this是代碼我有問題關閉應用程序

if (item.getTitle()== "ExitItem"){ 

      say("Bye Master,May The Force Be With You"); 

       finish(); 

我敢肯定這是很容易的,但因爲時間晚了,我想不出正確了的:DD反正日子過好

public void say(String text2say){ 
    talker.speak(text2say, TextToSpeech.QUEUE_FLUSH, null); 
} 

@Override 
    public void onInit(int status) { 

} 
@Override 
public void onDestroy() { 
    if (talker != null) { 
     talker.stop(); 
     talker.shutdown(); 
}     

回答

0

我不確定這是否會完全解決問題,並且您只發布了一段代碼,但是fi我注意到的第一件事是您使用==來比較字符串,這是一種不好的做法。

嘗試將其更改爲:

if (item.getTitle().equals("ExitItem") { 

而且,如果異步執行say方法則finish()可能會被調用和執行say方法有機會做任何事情之前。

編輯:由於它是異步完成,你會希望使用onUtteranceCompleted捕捉到文本到語音短語已被說。

TextToSpeech tts = new TextToSpeech(context, new OnInitListener() { 

@Override 
public void onInit(int status) { 

    mTts.setOnUtteranceCompletedListener(new OnUtteranceCompletedListener() { 

     @Override 
     public void onUtteranceCompleted(String utteranceId) { 

      runOnUiThread(new Runnable() { 

       @Override 
       public void run() { 
        finish(); 
       } 
      }); 
     } 
    }); 

} 
}); 
+0

非常感謝您的信息。我更改了if語句。我不明白,我的意思是我們有一個Java代碼的進程優先級,你知道上面的代碼首先在同一個類或方法中執行。必須指出或寫點東西來解決異步化問題? – nomad

+0

如果'say'方法是異步完成的,就像在'AsyncTask'中一樣,您需要在[onPostExecute](http://developer.android.com/reference/android/os/AsyncTask)中執行'finish'調用。 HTML#onPostExecute(結果))。你能發佈更多的代碼嗎?上面代碼和'say'方法的封閉函數將會很有幫助。 – antew

+0

代碼用onOptionsItemSelected方法啓動,並說方法更新 – nomad

0

onUtteranceCompletedOnUtteranceProgress將幫助您跟蹤呼叫的進度。完成()相應。

+0

我很抱歉,我現在明白了答案.i意味着unterrenceprogress如何能幫助我。你能更具體嗎? – nomad

+0

看起來像你找到了實現。祝你好運!! – Shakti