¿Por qué UtteranceProgressListener no es una interfaz?

Estoy jugando con las características TTS de Android y la clase TextToSpeech tiene este método para establecer un oyente que se notifica una vez que el TextToSpeech ha terminado de jugar:

public int setOnUtteranceCompletedListener(TextToSpeech.OnUtteranceCompletedListener listener) 

Sin embargo, el OnUtteranceCompletedListener se define como public abstract class . Como mi MainActivity ya extiende Actividad, no puede extender OnUtteranceCompletedListener también. Podría utilizar el método más antiguo con un OnUtteranceCompletedListener , pero esto es obsoleto:

 public int setOnUtteranceCompletedListener (TextToSpeech.OnUtteranceCompletedListener listener)` 

¿Por qué OnUtteranceCompletedListener no está definido como public static interface ? Estoy pensando escribir mi propio UtteranceProgressListenerImpl , que entonces llamará simplemente el MainActivity s onDone método. ¿Es esta la forma correcta o hay una alternativa mejor / más limpia?

 private class UtteranceProgressListenerImpl extends UtteranceProgressListener { private MainActivity mainActivity; UtteranceProgressListenerImpl(MainActivity mA) { mainActivity = mA; } @Override public void onDone(String utteranceId) { mainActivity.onDone(utteranceId); } @Override public void onError(String utteranceId) { /* empty */ } @Override public void onStart(String utteranceId) { /* empty */ } } 

No sé creo que debería ser una interfaz también. Yo uso este código para evitarlo. Está disponible aquí también.

Además, vote por este error que he enviado hace un tiempo.

 public void setTts(TextToSpeech tts) { this.tts = tts; if (Build.VERSION.SDK_INT >= 15) { tts.setOnUtteranceProgressListener(new UtteranceProgressListener() { @Override public void onDone(String utteranceId) { onDoneSpeaking(utteranceId); } @Override public void onError(String utteranceId) { } @Override public void onStart(String utteranceId) { } }); } else { Log.d(TAG, "set utternace completed listener"); tts.setOnUtteranceCompletedListener(new OnUtteranceCompletedListener() { @Override public void onUtteranceCompleted(String utteranceId) { onDoneSpeaking(utteranceId); } }); } } 
  • TextToSpeech.setEngineByPackageName () devuelve el éxito incluso cuando el paquete no está disponible
  • ¿Existe una utilidad o API para convertir abreviaturas abreviadas de SMS a oraciones adecuadas?
  • Usar texto a voz en una llamada de voz
  • ¿Cómo interpretar audiblemente la pronunciación IPA en Android?
  • La salida TTS siempre va a A2DP
  • TTS: El éxito regresó de onInit () pero aún hay retraso para hablar primero
  • Texto a voz (TTS) -Android
  • Problemas con TTS en el Samsung Galaxy S3
  • Android TTS no habla
  • Android TTS (texto a voz) no pronuncia letra única correctamente
  • Cómo detener android.speech.tts.TextToSpeech?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.