¿Cómo saber cuándo se termina el TTS?

Estoy implementando una aplicación Interactive Voice Response en Android. Me gustaría saber cómo determinar cuándo la función tts.speak() ha terminado de hablar para poder llamar a mi función de reconocimiento de voz.

 public class TTSActivity extends Activity implements OnInitListener, OnUtteranceCompletedListener, ... { private TextToSpeech mTts; ........... private void speak(String text) { if(text != null) { HashMap<String, String> myHashAlarm = new HashMap<String, String>(); myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_ALARM)); myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "SOME MESSAGE"); mTts.speak(text, TextToSpeech.QUEUE_FLUSH, myHashAlarm); } } // Fired after TTS initialization public void onInit(int status) { if(status == TextToSpeech.SUCCESS) { mTts.setOnUtteranceCompletedListener(this); } } // It's callback public void onUtteranceCompleted(String utteranceId) { Log.i(TAG, utteranceId); //utteranceId == "SOME MESSAGE" } ........... } 

Leer un buen tutorial

El setOnUtteranceCompletedListener está obsoleto desde el nivel de API 15. En su lugar, utilice setOnUtteranceProgressListener .

Encontré un fragmento de código ( aquí ) que me hizo muy fácil saber cuándo se terminó el texto:

 @Override public void onInit(int status) { if (status == TextToSpeech.SUCCESS) { myTTS.setOnUtteranceProgressListener(new UtteranceProgressListener() { @Override public void onDone(String utteranceId) { // Log.d("MainActivity", "TTS finished"); } @Override public void onError(String utteranceId) { } @Override public void onStart(String utteranceId) { } }); } else { Log.e("MainActivity", "Initilization Failed!"); } } 

http://www.codota.com/android/scenarios/52fcbd34da0ae25e0f855408/android.speech.tts.TextToSpeech?tag=dragonfly

Me di cuenta de que hay personas que tienen problemas en el uso de TextToSpeech para pedir que la solución a usted

¿Cómo saber cuándo se termina el TTS? Sin usar setOnUtteranceCompletedListener

 public void isTTSSpeaking(){ final Handler h =new Handler(); Runnable r = new Runnable() { public void run() { if (!tts.isSpeaking()) { onTTSSpeechFinished(); } h.postDelayed(this, 1000); } }; h.postDelayed(r, 1000); } 

Utilice un SpeakableListener cuando haga el texto para hablar.

 private volatile boolean finished; private SpeakableListener listener = new SpeakableListener() { @Override public void markerReached(SpeakableEvent arg0) { // TODO Auto-generated method stub } @Override public void speakableCancelled(SpeakableEvent arg0) { // TODO Auto-generated method stub } @Override public void speakableEnded(SpeakableEvent arg0) { TestSpeaker.this.finished = true; } @Override public void speakablePaused(SpeakableEvent arg0) { // TODO Auto-generated method stub } @Override public void speakableResumed(SpeakableEvent arg0) { // TODO Auto-generated method stub } @Override public void speakableStarted(SpeakableEvent arg0) { TestSpeaker.this.finished = false; } @Override public void topOfQueue(SpeakableEvent arg0) { // TODO Auto-generated method stub } @Override public void wordStarted(SpeakableEvent arg0) { // TODO Auto-generated method stub } }; /** Speak the following string. */ public void sayIt(String str) { System.out.print(" " + str + " "); /* The the synthesizer to speak. */ synthesizer.speakPlainText(str, listener); 
  • La función de devolución de llamada de Android TTS onUtteranceCompleted no se recibe
  • Android llamada TTS en BroadcastReceiver
  • Cómo detener android.speech.tts.TextToSpeech?
  • Ampliación del paquete de idiomas de texto a voz (TTS) de Android
  • Android TTS añadir idiomas
  • ¿Por qué la intención de ACTION_CHECK_TTS_DATA es "incómoda de usar"?
  • ¿En qué circunstancias TextToSpeech.isSpeaking () devuelve true?
  • Android texto a voz es muy lento para inicializar
  • TextToSpeech.OnInitListener.onInit (int) que se llama continuamente
  • Cómo cambiar programáticamente el motor predeterminado TTS
  • Cómo cambiar la voz de un motor TTS
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.