2016-09-21 20 views
1

TextToSpeechインスタンスにUtteranceProgressListenerが設定されています。ユーザーがトークバックを使用しているときに、それが呼び出され、それがうまく動作するとになると、音声要求が中断され、UtteranceProgressListenerが呼び出されません(onError)。これはAndroid側の欠陥ですか、何か間違っていますか?トークバックが中断したときにTextToSpeechのUtteranceProgressListenerが呼び出されない

マイコード:

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); 
} 
+0

トークバックとは異なるTTSエンジンにバインドする場合、これを複製できますか? – brandall

答えて

0

それが中断音声イベントをキャプチャしUtteranceProgressListener#onStop(String utteranceId, boolean interrupted)方法が判明。私はそれが抽象メソッドではないので前に気付かなかったので、Android Studioは実装クラスを書くときに自動的にそれを挿入しませんでした。スクリーンリーダーが現在の音声を中断するたびに、このメソッドへの呼び出しは、中断された引数をtrueに設定して行います。

関連する問題