当Talkback中断时,不会调用TextToSpeech的UtteranceProgressListener

时间:2016-09-21 22:30:49

标签: android text-to-speech talkback

我在UtteranceProgressListener个实例上设置了TextToSpeech。它被调用并且效果很好,当用户使用Talkback时,它可能会中断我的语音请求,而UtteranceProgressListener永远不会被调用(甚至不是onError)。这是Android方面的缺陷还是我做错了什么?

我的代码:

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

1 个答案:

答案 0 :(得分:1)

事实证明,方法UtteranceProgressListener#onStop(String utteranceId, boolean interrupted)确实捕获了中断的语音事件。之前我没有注意到,因为它不是一个抽象的方法,所以Android Studio在编写实现类时并没有自动插入它。每当屏幕阅读器中断当前语音时,将使用中断的参数设置为true来调用此方法。