Servicio o de arranque Completado no es obligatorio
De hecho, no es necesario poner en práctica un Service
o registro para android.intent.action.BOOT_COMPLETED
Algunos ejemplos se muestra cómo registrar/anular el registro de un BroadcastReceiver
cuando la actividad es creada y destruida Sin embargo, esto es útil para las intenciones que espera solo cuando se abre la aplicación (para la comunicación interna entre Servicio/Actividad, por ejemplo).
Sin embargo, en el caso de un SMS, desea escuchar el intento todo el tiempo (y no solo cuando abre la aplicación).
Hay otra manera
Se puede crear un class
que se extiende BroadcastReceiver
y registrar a las intenciones deseadas a través de AndroidManifest.xml
. De esta manera, el BroadcastReceiver
será parte independiente de su actividad (y no dependerá del Ciclo de Vida de Actividad)
esta manera, su BroadcastReceiver
será notificado automáticamente por Android, tan pronto como un SMS llegan incluso si su aplicación está cerrada.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest>
...
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<application>
....
<receiver android:name=".MyCustomBroadcastReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
</manifest>
MyCustomBroadcastReceiver.java
public class MyCustomBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent != null) {
String action = intent.getAction();
if(action != null) {
if(action.equals("android.provider.Telephony.SMS_RECEIVED")) {
// DO YOUR STUFF
} else if (action.equals("ANOTHER ACTION")) {
// DO ANOTHER STUFF
}
}
}
}
}
Notas
Se pueden añadir otros intención de filtros para AndroidManifest y manejar todos ellos en BroadcastReceiver
misma.
Inicie un servicio solo si va a realizar una tarea larga. Solo necesita mostrar una notificación o actualizar alguna base de datos, solo use el código anterior.
Es posible que también desee asegurarse de que tiene el permiso 'RECEIVE_BOOT_COMPLETED' definido en el archivo de manifiesto de su aplicación para que esto funcione. –
¿Funciona esto si el contexto de la aplicación extiende otro de una biblioteca de proyectos? – Maxrunner
Gracias Javanator (Rohit), es su ayuda para mí (Ravi-CIPL y Malasia) – DynamicMind