Android TextToSpeech';当对讲中断时,不会调用s OuttanceProgressListener
我在Android TextToSpeech';当对讲中断时,不会调用s OuttanceProgressListener,android,text-to-speech,talkback,Android,Text To Speech,Talkback,我在TextToSpeech实例上设置了一个outtanceprogresslistener。它被调用并且工作正常,但是当用户使用对讲时,它可能会中断我的语音请求,并且我的话语进程侦听器永远不会被调用(甚至onError)。这是安卓方面的缺陷还是我做错了什么 我的代码: final String utteranceId = generateUtteranceId(); tts.setOnUtteranceProgressListener(new UtteranceProgressListener
TextToSpeech
实例上设置了一个outtanceprogresslistener
。它被调用并且工作正常,但是当用户使用对讲时,它可能会中断我的语音请求,并且我的话语进程侦听器
永远不会被调用(甚至onError
)。这是安卓方面的缺陷还是我做错了什么
我的代码:
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);
}
final String outtanceId=generateUTranceId();
setOnPatternanceProgressListener(新的话语进程Listener(){
@凌驾
公共void onStart(字符串s){
如果(话语ID等于){
Log.e(标签“onStart”);
}
}
@凌驾
公共无效onDone(字符串s){
如果(话语ID等于){
Log.e(标签“onDone”);
}
}
@凌驾
公共void onError(字符串s){
如果(话语ID等于){
Log.e(标签“onError”);
}
}
});
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.LOLLIPOP){
tts.speak(textToSpeech,textToSpeech.QUEUE_ADD,null,outtanceid);
}否则{
HashMap=newHashMap();
map.put(TextToSpeech.Engine.KEY_PARAM_outrance_ID,outranceid);
tts.speak(textToSpeech,textToSpeech.QUEUE\u ADD,map);
}
结果表明,方法outtanceprogresslistener#onStop(字符串outtanceid,布尔中断)
确实捕获了中断的语音事件。我以前没有注意到,因为它不是一个抽象方法,所以AndroidStudio在编写实现类时不会自动插入它。每当屏幕阅读器中断当前语音时,将调用此方法,并将中断参数设置为true。如果绑定到与对讲使用不同的TTS引擎,您是否可以复制此方法?您如何知道何时再次继续TTS?我想您不应该尝试向用户发出更多语音。否则,应用程序可能看起来很烦人。如果您仍然想让用户能够聆听,请将语音作为文本的屏幕项目提供。感谢您的见解。我正在开发的应用程序有tts,可以大声读书。我不确定预期的行为应该是什么。如果我继续tts,可能会像你说的那样让人恼火,但如果我让对讲处理所有事情,我应用程序中的阅读设置将不会应用于它,这可能也会让人恼火。看看这是否适用于你的情况:在谷歌Play Books应用程序中,你可以设置应用程序大声朗读文本,并且还具有对讲兼容性。它的工作原理是在对讲结束后等待几秒钟,然后继续阅读。这与我之前所说的有点相反,但至少在回话和你自己的讲话之间有一些喘息的余地。