Если вы загляните в последнюю документацию по Android, вы заметите новый метод, введенный в UtteranceProgressListener на уровне API 26 - он называется onRangeStart ((String utteranceId, int start, int end, int frame)
https://developer.android.com/reference/android/speech/tts/UtteranceProgressListener.html#onRangeStart(java.lang.String,%20int,%20int,%20int)
Однако, как указано в документации:
"Вызывается только в том случае, если механизм предоставляет информацию о времени, вызывая rangeStart (int, int, int)"
Это реализовано вthe SynthesisCallback: https://developer.android.com/reference/android/speech/tts/SynthesisCallback.html#rangeStart(int,%20int,%20int)
Опять документация гласит:
«Служба может вызывать этот метод для предоставления временной информации о произносимом тексте.»
Итак, к сожалению, это означаетчто обратный вызов, предоставляющий необходимую информацию о времени, зависит от реализации.
На моем устройстве под управлением Android 8.0.0 и с использованием механизма tts по умолчанию (com.google.android.tts) я не получил обратный вызов.
Для тестирования вам потребуется
- для сборки с SDK уровня 26 или выше
- Реализация собственного UtteranceProgressListener
- Установите его в движок TextToSpeech, вызвав TextToSpeech.setOnUtteranceProgressListener (listener);
- Переопределите метод onRangeStart (String, int, int) в вашем UtteranceProgressListener.
Если ваша реализация поддерживает информацию о времени, вы получите обратный вызов, если, возможно, вам лучше не искать другую реализацию движка или, возможно, реализовать свою собственную TextToSpeechService.