como su servicio ya está configurado, simplemente agregue un receptor de transmisió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 tu servicio onDestroy
:
unregisterReceiver(receiver);
y está listo para recibir la transmisión de los filtros que mencione onCreate
. 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 modelo independiente
BroadcastReceiver
. Esto asegura que su aplicación pueda responder a la transmisión, ya sea que seService
esté ejecutando o no . De hecho, el uso de este patrón puede eliminar porService
completo la necesidad de una 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 pasa un
Intent
(Bundle
) alService
y responde enonStartCommand()
.P.ej:
fuente
Service
si aún no se estaba ejecutando, o pasaría un nuevoIntent
si lo está (para su recuperaciónonStartCommand
). Si sólo desea que se ejecute cuando elService
es en vivo, usted podría programación activar / desactivar elReceiver
componente a través de losPackageManager
'ssetComponentEnabledSetting()
.Receiver
vivo cuando seService
está ejecutando.