我正在尝试使用BroadcastReceiver
来处理多个操作。接收器注册了一个intent过滤器,但这限制了我只向接收器发送一种动作类型的意图(见Intent.getAction();
)
这是我的BroadcastReceiver
类以及我想要处理其中的操作的方式。
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
}
}
}
我注册意图的地方如下(在服务类中):
@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的意图设置setAction(“MyBroadcastReceiver”)。
但是我希望传递具有不同操作的意图,我该如何处理?
或者这不是一个好的方法,最好是为每个不同的意图使用单独的BroadcastReceiver
实现,并使用它自己的IntentFilter
?
答案 0 :(得分:5)
BroadcastReceiver
可以处理多个操作,将它们添加到intent过滤器
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;
}
答案 1 :(得分:1)
您可以使用IntentFilter为广播接收器注册一个或多个动作,如下所示: -
IntentFilter filter = new IntentFilter();
filter.addAction("Action1");
filter.addAction("Action2");
filter.addAction("Action3");
this.registerReceiver(mbr, filter);