2017-10-18 174 views
0

在Android TextToSpeech中,我們怎麼知道Speech是否完成。演講結束後我想改變圖標。我在Button Onclick Listener中聲明瞭tts.speak()。我使用線程postdelayed處理程序一段時間後更改圖標。但是要閱讀的文本在不同的時間會有所不同。它沒有解決。 CheckThemestart(),ChangeThemeStop()是改變圖標的​​函數。TextToSpeech API

我宣佈的OnCreate()以下:

  tts = new TextToSpeech(getContext(), new 
         TextToSpeech.OnInitListener() { 
      @Override 
      public void onInit(int status) { 
      if (status != TextToSpeech.ERROR) { 
       tts.setLanguage(Locale.UK); 
      tts.speak("",TextToSpeech.QUEUE_FLUSH,null); 
      } 

扣onClickListener:

if (!tts.isSpeaking()) { 
        CheckThemeStart(); 
        tts.speak(plainText, TextToSpeech.QUEUE_FLUSH, null); 

        new Handler().postDelayed(new Runnable() { 
         @Override 
         public void run() { 
          //change icon after spoken 
          CheckThemeStop(); 

         } 
        }, 15000); 

       } else { 
        CheckThemeStop(); 
        tts.stop(); 
       } 
+0

你嘗試setOnUtteranceProgressListener? –

+0

[如何知道什麼時候TTS完成?](https://stackoverflow.com/questions/4658376/how-to-know-when-tts-is-finished) –

+0

我試着用setOnUtterenceProgressListener。但它沒有制定出來,我聲明瞭以下旁tts.speak(): tts.setOnUtteranceCompletedListener(新 TextToSpeech.OnUtteranceCompletedListener(){ \t \t \t \t \t \t \t @覆蓋 \t \t \t \t \t \t \t公衆void onUtteranceCompleted(String utteranceId){ \t \t \t \t \t \t \t \t CheckThemeStop(); \t \t \t \t \t \t \t} \t \t \t \t \t \t}) –

回答

1

如果我們聲明具有唯一的字符串ID的hasmap參數,並通過該ID匹配,如果它執行你的內心onUtterenceCompletedListener聲明一下()比較utterence ID。 以下是代碼片段。

    HashMap<String,String> params=new HashMap<String, String>(); 
        params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,"SpeakID"); 
        tts.speak(plainText, TextToSpeech.QUEUE_FLUSH,params); 
        tts.setOnUtteranceCompletedListener(new TextToSpeech.OnUtteranceCompletedListener() { 
         @Override 
         public void onUtteranceCompleted(String utteranceId) { 
          if(utteranceId.equals("SpeakID")) 
          { 
            CheckThemeStop(); 
          } 
         } 
        }); 
1

您可以註冊爲UtteranceProgressListener TTS開始和結束時間和錯誤處理。

tts.setOnUtteranceProgressListener(new UtteranceProgressListener() { 
     @Override 
     public void onStart(String s) { 

     } 

     @Override 
     public void onDone(String s) { 

     } 

     @Override 
     public void onError(String s) { 

     } 
     }); 
+0

我想這也是由OnDone聲明說()的調用onStart()和更改圖標()。但他們兩個不工作 –

+0

請把日誌和調試,並檢查他們是否被調用?或者把整個TTS的代碼。 –

+0

@ReyanshMishra我檢查了調試器。它沒有進入onStart(),onDone()。我也嘗試了setOnUtterenceCompletedListener()。這也沒有奏效。 –