comme votre service est déjà configuré, ajoutez simplement un récepteur de diffusion dans votre service:
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
}
}
};
dans votre service, onCreate
faites ceci:
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);
et à votre service onDestroy
:
unregisterReceiver(receiver);
et vous êtes prêt à recevoir des émissions pour tous les filtres que vous mentionnez onCreate
. Assurez-vous d'ajouter une autorisation si nécessaire. par exemple
<uses-permission android:name="android.permission.RECEIVE_SMS" />
Le meilleur modèle est de créer un modèle autonome
BroadcastReceiver
. Cela garantit que votre application peut répondre à la diffusion, qu'elle soit enService
cours d'exécution ou non . En fait, l'utilisation de ce modèle peut supprimerService
complètement le besoin d'un fonctionnement constant .Enregistrez le
BroadcastReceiver
dans votre manifeste et créez une classe / un fichier distinct pour celui-ci.Par exemple:
Lorsque le récepteur s'exécute, il vous suffit de passer un
Intent
(Bundle
) auService
, et d'y répondreonStartCommand()
.Par exemple:
la source
Service
si elle n'était pas déjà en cours d'exécution, ou transmettrait un nouveauIntent
si tel est le cas (pour la récupération dansonStartCommand
). Si vous voulez seulement à courir lorsque leService
est en direct, vous pouvez activer programme / désactiver leReceiver
composant à travers lesPackageManager
« ssetComponentEnabledSetting()
.Receiver
vivant lorsque leService
est en cours d'exécution.