你的意思可能是:
- 阅读开始 -> Play 消失,Stop 可见
- 阅读结束 -> 播放可见,停止不见了
无论如何,UtteranceProgressListener 的目的正是您所描述的。用于监控语音合成的进度。
您可以在说出的任何文本中添加“话语 ID”(此处为“helloText”):
tts.speak("Hello Stack Overflow!", TextToSpeech.QUEUE_ADD, "helloText");
但在你的情况下这并不是真正必要的,所以最后一个参数可以为空:
tts.speak("Hello Stack Overflow!", TextToSpeech.QUEUE_ADD, null);
应该在调用speak() 之前添加UtteranceProgressListener。例如,如果 TTS 状态为 TextToSpeech.SUCCESS,您可以在 TTS 初始化回调 onInit() 中执行此操作。
它可以是一个单独的类,也可以只是一个匿名的内部类:
speech.setOnUtteranceProgressListener(new UtteranceProgressListener() {
@Override
public void onStart(String utteranceId) {
// Speaking started.
}
@Override
public void onDone(String utteranceId) {
// Speaking stopped.
}
}
@Override
public void onError(String utteranceId) {
// There was an error.
}
});
onStart() 方法在讲话开始时触发(在调用 speak() 后不久),因此这是切换可见按钮的一个可能位置。例如,播放按钮可以切换为停止按钮。
onDone() 方法在讲话结束时触发,这是另一个可能切换可见按钮的地方。例如,停止按钮可以切换为播放按钮。
如您所见,如果您在 speak() 方法调用中提供了“话语 ID”,则这两种方法都可以使用。如果您需要确切地知道正在朗读/结束朗读/因错误而失败的文本,这将非常有用。