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.
- Identificador único para SMS y contactos (para comprobar la duplicación) en Android
- Leer y mostrar texto de mensaje entrante android
- Cómo crear BroadcastReceiver sin actividad
- Cómo detectar la conversación SMS de grupo
- SMS tipo de Android 0
- ¿Cómo funciona "deliveryIntent" en el marco de Android SMS?
- ¿Cómo enviar SMS usando Twilio en mi aplicación Android?
- Observe los SMS que envían la aplicación en el emulador
- Lanzar la aplicación android cuando se pulsa un enlace en SMS
- ¿Abre la aplicación de Android enviando un mensaje de texto?
- Android - Determinar el límite de texto SMS
- ¿Cómo leer el contenido del mensaje de un mensaje nuevo en el próximo mensaje en android?
- Bloquear llamadas entrantes y sms en android
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(); } }
- Necesita alguna aclaración sobre las pruebas beta / alpha en la consola de desarrollo
- ¿Cómo las aplicaciones populares autentican las solicitudes de los usuarios desde su aplicación móvil a su servidor?