2016-09-21 67 views
1

我在TextToSpeech實例上設置了UtteranceProgressListener。它被稱爲,它運作良好,當用戶使用對講時,它可能會中斷我的語音請求,我的UtteranceProgressListener永遠不會被調用(甚至不onError)。這是Android的一個缺陷,或者我做錯了什麼?對話中斷時不會調用TextToSpeech的UtteranceProgressListener

我的代碼:

final String utteranceId = generateUtteranceId(); 
tts.setOnUtteranceProgressListener(new UtteranceProgressListener() { 
    @Override 
    public void onStart(String s) { 
     if(utteranceId.equals(s)) { 
      Log.e(TAG, "onStart"); 
     } 
    } 

    @Override 
    public void onDone(String s) { 
     if(utteranceId.equals(s)) { 
      Log.e(TAG, "onDone"); 
     } 
    } 

    @Override 
    public void onError(String s) { 
     if(utteranceId.equals(s)) { 
      Log.e(TAG, "onError"); 
     } 
    } 
}); 

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    tts.speak(textToSpeech, TextToSpeech.QUEUE_ADD, null, utteranceId); 
} else { 
    HashMap<String, String> map = new HashMap<String, String>(); 
    map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, utteranceId); 
    tts.speak(textToSpeech, TextToSpeech.QUEUE_ADD, map); 
} 
+0

如果綁定到不同於Talkback使用的TTS引擎,您可以複製此內容嗎? – brandall

回答

0

原來UtteranceProgressListener#onStop(String utteranceId, boolean interrupted)確實捕獲中斷演講事件的方法。之前我沒有注意到它,因爲它不是一個抽象方法,因此Android Studio在編寫實現類時不會自動插入它。每當屏幕閱讀器中斷當前語音時,將對此方法進行調用,將中斷參數設置爲true。