¿Por qué la intención de ACTION_CHECK_TTS_DATA es "incómoda de usar"?

La introducción oficial de Text-To-Speech en Android dice que "al crear su actividad, un buen primer paso es comprobar la presencia de los recursos TTS con la intención correspondiente:"

Intent checkIntent = new Intent(); checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); startActivityForResult(checkIntent, MY_DATA_CHECK_CODE); 

Pero @gregm en este hilo sugiere lo contrario:

Además, no utilice la intención ACTION_CHECK_TTS_DATA, que es difícil de usar .

En su lugar, haga lo siguiente:

  1. Crear TextToSpeech
  2. OnInit, compruebe isLanguageAvailable () si lo es, su aplicación está todo configurado. Si no, envíe la ACTION_INSTALL_TTS_DATA

Si entiendo correctamente, lo que @gregm hace / sugiere es aplazar la comprobación onActivityResult() de onActivityResult() a onInit() .

¿Por qué es esto mejor que el enfoque formal ?

¿Y por qué ACTION_CHECK_TTS_DATA es tan "incómodo de usar"?

Este es @gregm.

ACTION_CHECK_TTS_DATA requiere una ejecución más complicada y más código, pero hace lo mismo que TextToSpeech.isLanguageAvailable() Permítanme explicar:

1) Usted necesita dos procesos asincrónicos cuando utiliza ACTION_INSTALL_TTS_DATA . Primero, para lanzar un Intent y recibir el resultado. Segundo, esperar a que TextToSpeech llame a onInit() Más puede ir mal mientras su aplicación está haciendo todo eso esperando.

2) Todo lo que usted está tratando de hacer es ejecutar una instrucción if y necesita el mismo código para manejar la instalación de los datos de idioma si es necesario, así que ¿ por qué molestarse en agregar complejidad extra ?

Se reduce a hacer esto:

¿Quieres 1 línea de código:

 if (TextToSpeech.isLanguageAvailable()) { (same tts init code here) } 

O> 1 líneas de código como:

 Intent checkIntent = new Intent(); checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); startActivityForResult(checkIntent, MY_DATA_CHECK_CODE); public void onActivityResult(...) { if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) (same tts init code here) } 

En mi punto de vista, prefiero simplemente llegar a la instrucción if, en lugar de usar un Intent around de Intent . Creo que la documentación oficial de Android necesita cambiar para recomendar este enfoque.

Si todavía no cree que ambos enfoques estamos discutiendo hacer lo mismo, echa un vistazo a las implementaciones alternativas que tengo aquí y aquí . Además, si no se preocupan por todas estas cosas y sólo quieren que su aplicación hable, sólo extender esta actividad y hacerse.

  • Android "speak fallado: no está vinculado al motor tts"
  • ¿Cómo comprobar si TtsService (o un servicio de Android) está detenido?
  • Android TTS Masculino Masculino Voz Cambio
  • Inicializar el objeto TextToSpeech en un subproceso de trabajo
  • ¿Cómo puedo controlar cómo Android TTS reproduce audio?
  • ¿Cómo puedo guardar el archivo Text to Speech como formato .wav / .mp3 en Almacenamiento externo
  • TextToSpeech versión de compilación android no reproduce audio
  • ¿Cómo agregar voces nuevas a Android Pico TTS?
  • Manejo de múltiples idiomas sin demora en el TTS de Android
  • No se puede detectar la finalización del androide TTS (devolución de llamada).
  • Transmisión de notificaciones de texto a voz durante la conducción
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.