понял, что TtsSpan - это то, что нужно. Мне потребовалось некоторое время, чтобы получить правильный формат; Есть в основном ноль примеров того, как это сделать. Вот основы того, что сработало для меня, если кто-то еще сталкивался с этим с такой же потребностью (в kotlin):
var h:Int = Calendar.getInstance().get(Calendar.HOUR)
if (DateFormat.is24HourFormat(ApplicationContext))
h = Calendar.getInstance().get(Calendar.HOUR_OF_DAY)
val m:Int = Calendar.getInstance().get(Calendar.MINUTE)
val whenStr = getFormattedTime() // internal function I'm using to format it visually
wholeString = message.replace("|TIME|",whenStr) // my time doesn't always appear at the same place in the custom message
val spannedMsg:Spannable = SpannableString(wholeString)
val span:TtsSpan = TtsSpan.TimeBuilder(h, m).build()
spannedMsg.setSpan(span, wholeString.inexOf(whenStr),wholeString.indexOf(whenStr) + whenStr.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
tts.speak(spannedMsg, TextToSpeech.QUEUE_FLUSH, params, "UTT_ID")
Согласно странице документации TtsSpan, есть много других вариантов, кроме от TimeBuilder, так что не забудьте проверить это, если вы ищете различные настройки - просто знайте, что нет никаких примеров кода.