¿Por qué no se llama a UtteranceProgress Listener a Text to Speach?

He intentado llamar a algunos métodos de inicio y final de texto a voz, así que he utilizado el setOnUtteranceProgressListener, pero no funciona / get llamado.

¿Qué estoy haciendo mal?

Aquí el código necesario:

Clase:

public class SpeechRecognizerActivity extends Activity implements TextToSpeech.OnInitListener 

Método de 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!"); } } 

Método donde comienza hablando:

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

El Listener (Método se llama en speakOut): Ninguno de esos registros se muestran en 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"); } } } 

Una pequeña solución que encontré fue esta:

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

Lo he añadido al final del método speakOut, pero esta solución no es muy buena. Trabajar con los oyentes sería perfecto.

Entonces, ¿qué estoy haciendo mal?

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.