Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android TextToSpeech';当对讲中断时,不会调用s OuttanceProgressListener_Android_Text To Speech_Talkback - Fatal编程技术网

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应用程序中,你可以设置应用程序大声朗读文本,并且还具有对讲兼容性。它的工作原理是在对讲结束后等待几秒钟,然后继续阅读。这与我之前所说的有点相反,但至少在回话和你自己的讲话之间有一些喘息的余地。