本文简单的记录一下动态注册广播的方法:
三个步骤:
1.【创建广播接收器】(就是你的这类广播接收到之后想要干什么);
2.【做一个意图的过滤器】(就是要监听是不是你的广播),创建完之后要【注册】;
3.【取消注册】一般在onDestroy()里面取消。 如果不取消可能会出现内存泄漏(小菜鸟的我不太懂为啥一定要取消注册,于是了解了一下,大概的意思就是广播的接收器onReceiver是依附在Activity上的,除了Activity在调用,可能有其他系统服务等在用,当Activity onDestory的时候,由于onReceiver被其他服务调用,于是虽然Activity已经调用onDestory了,但是实际上Activity并没有被回收,这样就有可能会导致内存泄漏的问题)。

最后就是发广播了。

【第一步:首先创建广播接收器】:创建一个内部类MyBroadcastReceiver继承BroadcastReceiver类,重写onReceiver()方法,这个方法的意思就是:当接收到
对应已经注册了的广播,就会执行onReceiver里面的代码。

    class  MyBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            //接收到广播后你想干什么在这里做处理
             String action=intent.getAction();
            switch (action){
                   //打开另外一个activity
                case "com.example.OPEN_OTHER_ACTIVITY":
                    Intent intent1=new Intent();
                    intent1.setClass(MainActivity.this,SecondActivity.class);
                    MainActivity.this.startActivity(intent1);
                    break;
                    //打个Toast
                case "com.example.WAKE_UP":
                    Toast.makeText(context,"WakeUp",Toast.LENGTH_SHORT).show();
                    break;
            }

        }
    }

那么怎么样才可以知道是不是属于我的广播呢,就时候就要利用意图过滤器intentFilter啦。
【第二步:当然是要新建intentFilter了!】

        IntentFilter intentFilterButton=new IntentFilter();
        //addAction(字符串)可以理解为添加一种广播的类型;
        intentFilterButton.addAction("com.example.OPEN_OTHER_ACTIVITY");
        //当然你也可以添加多个...
        intentFilterButton.addAction("com.example.WAKE_UP");
        myBroadcastReceiver=new MyBroadcastReceiver();
        //最后就是注册,将刚才做的接收器实例和过滤器实例放进去;
        // 如果系统发出了OPEN_OTHER_ACTIVITY或者WAKE_UP的广播,接收器就会接收到然后执行onReceiver里面的代码
        //我想在多种情况下都是执行同一个动作/或者不同动作,就可以用广播(具体回看上面的onReceiver方法里面的代码)
        registerReceiver(myBroadcastReceiver,intentFilterButton);

【最后记得取消注册:】

 @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(myBroadcastReceiver);

    }

然后就是发送广播了:

       //点击button就会发送一条跳到其他Activity的广播
       bt_send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent("com.example.OPEN_OTHER_ACTIVITY");
                sendBroadcast(intent);
//               方式二: mContext.sendBroadcast(new Intent("com.example.OPEN_OTHER_ACTIVITY"));
//               ---这种方式就要构造一个context
            }
        });

以上小Demo就完成了,如果需要源码可以评论。
效果图如下:

在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐