注册广播

2017-06-08  本文已影响0人  shenlong77

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

静态注册广播

静态的广播只要程序的进程没有被杀死,就会一直存在,即使所有活动都被销毁了,只要进程没有被强制退出,或者被杀死,静态广播就一直存在。
这里的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

上一篇下一篇

猜你喜欢

热点阅读