J'essaye d'utiliser un BroadcastReceiver pour gérer plusieurs actions. Le destinataire est enregistré avec un filtre d'intention, mais cela m'empêche d'envoyer un seul type d'action d'intents au destinataire (voir Intent.getAction();)

C'est ma classe BroadcastReceiver et la façon dont je veux gérer les actions qu'elle contient.

class MyBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
        switch(...){  //the criteria for switching to a particular case
                    ... //some cases to handle here
        }           
    }
}

L'endroit où j'enregistre l'intention ressemble à ceci (dans la classe de service):

@Override
public void onCreate() {
    super.onCreate();
    mbr = new MyBroadcastReceiver();
    this.registerReceiver(mbr, new IntentFilter("MyBroadcastReceiver"));
}

La façon dont je passe un appel ressemble à ceci (en fait, je viens de définir un auditeur sur un bouton):

   //creating the pending intent
   PendingIntent myPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent("MyBroadcastReceiver"), 0);
   //add button listener
   remoteViews.setOnClickPendingIntent(R.id.my_button, myPendingIntent);

Cette manière m'oblige à setAction ("MyBroadcastReceiver") pour chaque intention que je souhaite transmettre à MyBroadcastReceiver.

Cependant, je souhaite transmettre des intentions comportant des actions différentes , comment dois-je procéder?

Ou ce n'est pas une bonne approche et il est préférable d'utiliser pour chaque intention différente une implémentation BroadcastReceiver distincte avec sa propre IntentFilter?

1
Flowryn 2 janv. 2016 à 15:10

2 réponses

Meilleure réponse

BroadcastReceiver peut gérer plusieurs actions, ajoutez-les au filtre d'intention

IntentFilter filter = new IntentFilter();
filter.addAction("action1");
filter.addAction("action2");

Puis enregistrez-le avec ce filtre

registerReceiver(mbr, filter);

Et à l'intérieur de votre propre commutateur de récepteur pour les actions

switch(intent.getAction()){
    case action1:
        // do something
        break;
    case action2:
        // do something
        break;
}
6
SaNtoRiaN 2 janv. 2016 à 12:16

Vous pouvez enregistrer une ou plusieurs actions pour le récepteur de diffusion en utilisant IntentFilter comme ci-dessous: -

IntentFilter filter = new IntentFilter();
filter.addAction("Action1");
filter.addAction("Action2");
filter.addAction("Action3");

this.registerReceiver(mbr, filter);
1
Rajen Raiyarela 2 janv. 2016 à 12:19