Android llamada TTS en BroadcastReceiver

Necesito llamar al servicio TTS dentro de la subclase de BroadcastReceiver. Cuando estoy implementar esa clase de OnInitListener, dio error en tiempo de ejecución.

¿Hay alguna otra forma de implementar TTS dentro de BroadcastReceiver?

Gracias,

Lo sentimos Código:

public class TextApp extends BroadcastReceiver implements OnInitListener { private TextToSpeech tts; private String message = "Hello"; @Override public void onReceive(Context context, Intent intent) { tts = new TextToSpeech(context, this); message = "Hello TTS"; } @Override public void onInit(int status) { if (status == TextToSpeech.SUCCESS) { tts.speak(message, TextToSpeech.QUEUE_FLUSH, null); } } } 

Tu código no funcionó en:

 tts = new TextToSpeech(context, this); 

El contexto sobre BroadcastReceiver es un " contexto restringido ". Significa que no puede iniciar el servicio en contexto en BroadcastReceiver. Porque TTS es un servicio, por lo que no llama anyting.

Las mejores soluciones es que iniciar otra intención de BroadcastReceiver con la actividad que llaman al servicio.

 public void onReceive(Context context, Intent intent) { .... Intent speechIntent = new Intent(); speechIntent.setClass(context, ReadTheMessage.class); speechIntent.putExtra("MESSAGE", message.getMessageBody().toString()); speechIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); context.startActivity(speechIntent); .... } 

Y luego en la actividad que se llama el servicio TTS con el parámetro de extras

 public class ReadTheMessage extends Activity implements OnInitListener,OnUtteranceCompletedListener { private TextToSpeech tts = null; private String msg = ""; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent startingIntent = this.getIntent(); msg = startingIntent.getStringExtra("MESSAGE"); tts = new TextToSpeech(this,this); } @Override protected void onDestroy() { super.onDestroy(); if (tts!=null) { tts.shutdown(); } } // OnInitListener impl public void onInit(int status) { tts.speak(msg, TextToSpeech.QUEUE_FLUSH, null); } // OnUtteranceCompletedListener impl public void onUtteranceCompleted(String utteranceId) { tts.shutdown(); tts = null; finish(); } } 

La respuesta de Al Zil no es totalmente correcta. Android TTS es un servicio limitado. Los receptores de emisión tienen un contexto limitado, pero no pueden unirse a ningún servicio. Sin embargo, pueden iniciar un servicio. Comenzar los tts de la actividad es aceptable, pero si usted no necesita UI usted puede también inicializarlo de un servicio. Mira esta respuesta para ver cómo se hace

Buena suerte.

  • ¿Qué es un Earcon?
  • Pausa en el TTS android
  • SpeechToText y ejecutando la intención ACTION_CHECK_TTS_DATA
  • Manejo de múltiples idiomas sin demora en el TTS de Android
  • Sistema lengua turca para el texto al discurso
  • Texto de Android a voz Voz masculina
  • Texto a voz (TTS) -Android
  • NullPointerException durante el uso de TTS en CustomListview
  • Agrega mi motor TTS a Android TTS Serivce como SAPI
  • ¿Es Google TTS Engine en todos los teléfonos Android, y dónde puedo conseguirlo?
  • 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.