Receptor de difusión dentro de un servicio

Estoy intentando iniciar un BroadcastReceiver dentro de un Service . Lo que estoy tratando de hacer es tener un service ejecución de fondo que recoja los mensajes de texto entrantes y registre las llamadas telefónicas entrantes. Pensé que la mejor manera de hacerlo es tener un service ejecución que incorpore un receptor de difusión que pueda catalogar.

¿Cómo voy a hacer esto? Ya tengo mi servicio en funcionamiento.

como su servicio ya está configurado, simplemente agregue un receptor de difusión en su servicio:

 private final BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if(action.equals("android.provider.Telephony.SMS_RECEIVED")){ //action for sms received } else if(action.equals(android.telephony.TelephonyManager.ACTION_PHONE_STATE_CHANGED)){ //action for phone state changed } } }; 

en su servicio onCreate haga esto:

 IntentFilter filter = new IntentFilter(); filter.addAction("android.provider.Telephony.SMS_RECEIVED"); filter.addAction(android.telephony.TelephonyManager.ACTION_PHONE_STATE_CHANGED); filter.addAction("your_action_strings"); //further more filter.addAction("your_action_strings"); //further more registerReceiver(receiver, filter); 

y en el servicio onDestroy :

 unregisterReceiver(receiver); 

y está listo para recibir transmisiones por los filtros que mencione en onCreate . Asegúrese de agregar cualquier permiso si es necesario. por ejemplo

  

El mejor patrón es crear un BroadcastReceiver independiente. Esto asegura que su aplicación puede responder a la transmisión, ya sea que el Service esté ejecutando o no. De hecho, el uso de este patrón puede eliminar por completo la necesidad de un Service ejecución constante.

Registre el BroadcastReceiver en su Manifiesto y cree una clase / archivo separado para él.

P.ej:

      

Cuando el receptor se ejecuta, simplemente transfiere un Intent ( Bundle ) al Service y lo responde en onStartCommand() .

P.ej:

 public class FooReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // do your work quickly! // then call context.startService(); } }