如何使用 BroadcastReceiver 处理多个动作?

How to use BroadcastReceiver to handle multiple actions?

我正在尝试使用 BroadcastReceiver 来处理多个操作。接收者注册了一个意图过滤器,但这限制了我只能向接收者发送一种动作类型的意图(参见Intent.getAction();

这是我的 BroadcastReceiver class 以及我希望在其中处理操作的方式。

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
        }           
    }
}

我注册意图的地方是这样的(在服务class):

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

我打电话的方式是这样的(实际上我只是给一个按钮设置了一个监听器):

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

这种方式迫使我为每个要传递给 MyBroadcastReceiver 的意图设置 Action("MyBroadcastReceiver")。

但是我想传递具有 不同操作 的意图,我应该如何进行?

或者这不是一个好方法,最好为每个不同的意图使用一个单独的 BroadcastReceiver 实现和它自己的 IntentFilter?

BroadcastReceiver可以处理多个动作,将它们添加到意图过滤器

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

然后用那个过滤器注册它

registerReceiver(mbr, filter);

并在您自己的接收器开关内进行操作

switch(intent.getAction()){
    case action1:
        // do something
        break;
    case action2:
        // do something
        break;
}

您可以使用 IntentFilter 为广播接收器注册一个或多个操作,如下所示:-

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

this.registerReceiver(mbr, filter);