当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何使用BroadcastReceiver处理多个动作?》经验,为你挑选了1个好方法。

我试图用a 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



1> SaNtoRiaN..:

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

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有