Receptor de radiodifusión dentro de un servicio

Estoy intentando poner en marcha un BroadcastReceiver dentro de un Service . Lo que estoy tratando de hacer es tener un service ejecución de fondo va que recoge los mensajes de texto entrantes, y registra las llamadas telefónicas entrantes. Me imaginé que la mejor manera de ir sobre esto es tener un service ejecución que incorpora un receptor de difusión que puede catalogar cualquiera.

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

Ya que su servicio ya está configurado, simplemente agregue un receptor de difusión a 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 onCreate su servicio 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 que son buenos para ir a recibir la difusión de lo que los filtros que menciona en onStartCommand. Asegúrese de agregar cualquier permiso si es necesario. Por ejemplo

 <uses-permission android:name="android.permission.RECEIVE_SMS" /> 

El mejor patrón es crear un BroadcastReceiver autónomo. Esto asegura que su aplicación puede responder a la emisión, independientemente de si el Service está funcionando. De hecho, el uso de este patrón puede eliminar la necesidad de un Service ejecución constante por completo.

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

P.ej:

 <receiver android:name=".FooReceiver" > <intent-filter > <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> 

Cuando el receptor se ejecuta, simplemente pasa un Intent ( Bundle ) al Service y responde a él 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(); } } 
  • ¿Cómo enviar un mensaje SMS en un dispositivo Android en segundo plano?
  • Bloqueo de SMS y Permitir problema en android 4.4 (kitkat) versión
  • Android: obtenga el resultado del cuadro de diálogo predeterminado de cambios de la aplicación de SMS
  • ¿Cómo puede enviar sms en android en doble SIM?
  • Puedo enviar "SMS recibido intención"?
  • SMS reciben sin notificación
  • ¿Cómo enviar el SMS más de 160 caracteres?
  • ¿Es possilbe leer y / o modificar la cabecera de SMS en Android?
  • Cómo desactivar mi aplicación sms como aplicación predeterminada en Android
  • Encontrar datamessage en el teléfono android antes de instalar la aplicación
  • ¿Cómo obtengo el nombre guardado de SMS Sender Contact (Person) mediante "content: // sms / inbox"
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.