美文网首页
注册广播

注册广播

作者: shenlong77 | 来源:发表于2017-06-08 14:53 被阅读0次

    普通的广播是在整个手机的范围内发送的,所有的应用程序都会接收到
    内部广播只在自己的程序内部发送,只有自己的应用程序内部可以收发广播

    静态注册广播

    静态的广播只要程序的进程没有被杀死,就会一直存在,即使所有活动都被销毁了,只要进程没有被强制退出,或者被杀死,静态广播就一直存在。
    这里的intent-filter和activity的intent-filter是一样的,可以设置多个action,也可是设置data属性。

    注册自定义的广播

    自定义的广播需要自己写发送和接收广播的方法
    1 新建一个类继承BroadcastReceiver,并重写onReceive方法,当发送对应的广播是。onReceive方法就会执行

    public class MyReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.i("receiver","receiver");
        }
    }
    

    2 在配置文件中配置广播
    receiver的name是上面定义的广播类的类名,action的name是广播对应的action的name,自定义的广播的action的name可以自己随便定义。即发送的广播的action和这个action匹配时,这个广播就会得到响应

    <receiver android:name=".broadcast.MyReceiver">
                <intent-filter>
                    <action android:name="com.zyl.receiver"/>
                </intent-filter>
    </receiver>
    
    注册已有的广播

    这类广播包括系统广播,或者是其他应用程序的广播,这类广播不用在自己的程序内部发送广播,只需要注册广播。例如监听网络变化的广播,只要系统网络变化了,就会自动发送一条广播,自己的程序内只负责接收并且处理这个广播就可以了。
    1 新建一个类继承BroadcastReceiver,并重写onReceive方法,当发送对应的广播是。onReceive方法就会执行

    public class MyReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.i("receiver","receiver");
        }
    }
    

    2 在配置文件中配置广播
    这时action的name就不能自己定义了,每种类型的广播都会有自己的action的name,要接收什么类型的广播,action的name就写成什么,这里的例子是监听网络变化的广播,当网络变化时,就会发送这样一条广播,就会触发对应的onReceive方法,在里面处理就可以了。

    <receiver android:name=".broadcast.MyReceiver">
                <intent-filter>
                    <action android:name"android.net.conn.CONNECTIVITY_CHANGE"/>
                </intent-filter>
    </receiver>
    

    动态注册广播

    动态注册的广播必须在活动销毁的时候取消注册,所以动态广播和activity共同生存,当activity被销毁时,动态广播也被销毁了。
    动态注册的广播就不需要在配置文件中注册了,这也是四大组件中唯一一个不需要注册的情况

    注册自定义的广播

    1 新建一个类继承BroadcastReceiver,并重写onReceive方法,当发送对应的广播是。onReceive方法就会执行

    public class MyReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.i("receiver","receiver");
        }
    }
    

    2 在activity的oncreate方法中动态注册广播。在onDestory中取消注册广播

    public class DetailActivity extends Activity {
        private MyReceiver myReceiver;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.detail_activity_layout);
            //创建广播的对象
            myReceiver=new MyReceiver();
            //设置action
            IntentFilter intentFilter=new IntentFilter();
            intentFilter.addAction("com.zyl.receiver");
            //注册广播
            registerReceiver(myReceiver,intentFilter);
            }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            //取消注册广播
            unregisterReceiver(myReceiver);
        }
    }
    
    
    注册已有的广播

    步骤还是和上面一样,只是把action的名字换成已知的action的name

    相关文章

      网友评论

          本文标题:注册广播

          本文链接:https://www.haomeiwen.com/subject/tgttqxtx.html