如何使用 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);
我正在尝试使用 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);