J'essaie de démarrer un BroadcastReceiver
dans un Service
. Ce que j'essaie de faire est d'avoir un arrière-plan en cours d'exécution service
qui collecte les messages texte entrants et enregistre les appels téléphoniques entrants. Je pensais que la meilleure façon de faire est d’avoir un service
en cours d’exécution qui intègre un récepteur de radiodiffusion pouvant cataloguer l’un ou l’autre.
Comment puis-je faire cela? Mon service est déjà opérationnel.
votre service étant déjà configuré, ajoutez simplement un récepteur de diffusion à 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 dans votre service onDestroy
:
unregisterReceiver(receiver);
et vous êtes prêt à recevoir des émissions pour tous les filtres que vous mentionnez dans onCreate
. Assurez-vous d'ajouter une autorisation si nécessaire. par exemple.
<uses-permission Android:name="Android.permission.RECEIVE_SMS" />
Le meilleur modèle consiste à créer un fichier autonome BroadcastReceiver
. Cela garantit que votre application peut répondre à la diffusion, que Service
soit en cours d'exécution ou non. En fait, l’utilisation de ce modèle peut supprimer la nécessité d’un Service
à exécution constante.
Enregistrez le BroadcastReceiver
dans votre manifeste et créez un fichier/classe distinct pour celui-ci.
Par exemple:
<receiver Android:name=".FooReceiver" >
<intent-filter >
<action Android:name="Android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
Lorsque le destinataire est en marche, il vous suffit de passer un Intent
(Bundle
) au Service
, et d'y répondre dans onStartCommand()
.
Par exemple:
public class FooReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// do your work quickly!
// then call context.startService();
}
}