我有一个带有两个 ImageButton(播放、停止)的 FrameLayout。默认情况下
播放 按钮是VISIBLE
,停止 按钮是GONE
单击播放 会启动读取文本的 TTS 引擎。阅读完文本后,我想设置可见性
播放到GONE
,停止到VISIBLE
我应该使用 UtteranceProgressListener 来达到目的吗?如果没有,
- 如何执行上述操作?
- UtteranceProgressListener 的用途是什么?
最佳答案
你的意思是:
- 开始阅读 -> 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”,那么这两种方法都可用。如果您需要确切知道正在说出/已说完/因错误而失败的文本,这将很有用。
关于android - 何时使用 UtteranceProgressListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37004546/