Почему не прослушивается прослушиватель UtteranceProgress в тексте для речи?

Я попытался вызвать некоторые методы для начала и конца текста в речь, поэтому я использовал setOnUtteranceProgressListener, но он не работает / не вызван.

Что я делаю не так?

Здесь нужен код:

Класс:

public class SpeechRecognizerActivity extends Activity implements TextToSpeech.OnInitListener 

Метод Init:

  @Override public void onInit(int status) { if (status == TextToSpeech.SUCCESS) { String language = Locale.getDefault().getLanguage(); int result = tts.setLanguage(Locale.US); if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) { Log.e("TTS", "This Language is not supported"); } else { } } else { Log.e("TTS", "Initilization Failed!"); } } 

Метод начала разговора:

 private void speakOut(String text) { setTtsListener(); tts.setPitch(1.5f); tts.setSpeechRate(1.5f); tts.speak(text, TextToSpeech.QUEUE_FLUSH, null); } 

Слушатель (метод вызывается в talkOut): ни один из этих журналов не отображается в Logcat.

 private void setTtsListener() { if (Build.VERSION.SDK_INT >= 15) { int listenerResult = tts.setOnUtteranceProgressListener(new UtteranceProgressListener() { @Override public void onDone(String utteranceId) { Log.d(TAG,"progress on Done " + utteranceId); } @Override public void onError(String utteranceId) { Log.d(TAG,"progress on Error " + utteranceId); } @Override public void onStart(String utteranceId) { Log.d(TAG,"progress on Start " + utteranceId); } }); if (listenerResult != TextToSpeech.SUCCESS) { Log.e(TAG, "failed to add utterance progress listener"); } } else { int listenerResult = tts.setOnUtteranceCompletedListener(new TextToSpeech.OnUtteranceCompletedListener() { @Override public void onUtteranceCompleted(String utteranceId) { Log.d(TAG,"progress on Completed " + utteranceId); } }); if (listenerResult != TextToSpeech.SUCCESS) { Log.e(TAG, "failed to add utterance completed listener"); } } } 

Небольшое обходное решение, которое я нашел, было следующим:

 boolean speakingEnd = tts.isSpeaking(); do { speakingEnd = tts.isSpeaking(); } while ((speakingEnd)); Log.d(TAG,"talking stopped"); 

Я добавил его в конец метода talkOut, но это решение не очень хорошо. Работа с слушателями была бы идеальной.

Так что я делаю неправильно?

Solutions Collecting From Web of "Почему не прослушивается прослушиватель UtteranceProgress в тексте для речи?"

Когда вы вызываете tts.speak(text, TextToSpeech.QUEUE_FLUSH, null); Вам нужно передать карту с помощью KEY_PARAM_UTTERANCE_ID

  HashMap<String, String> map = new HashMap<String, String>(); map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,"messageID"); tts.speak(text, TextToSpeech.QUEUE_FLUSH, map); 

Это позволяет TextToSpeech знать, как использовать ваш прослушиватель высказываний для этого text