简介
- 每个应用都可以对自己感兴趣的广播进行注册,Andorid提供了一套完整的API用于发送和接收广播,发送广播借助Intent,接收广播借助BroadcastReceiver
广播类型
- 标准广播:完全异步执行,所有的Receiver会同一时间收到该广播,无法被截断
- 有序广播:同步执行的广播,同一时刻只有一个Receiver能收到广播消息,当这个Receiver中的逻辑执行完毕后,才会继续传播。
接收系统广播
动态注册
- 新建一个类继承自BroadcastReceiver,并重写onReceive()方法,当收到广播时,onReceiver()方法就会得到执行
- 创建一个IntentFilter实例,并添加想要收到广播的action
- 调用registerReceiver()方法进行注册,将BroadcastReceiver实例和IntentFilter实例传入
- 最后,动态注册的BroadcastReceiver一定要取消注册,通过unregisterReceiver()方法
静态注册
- 8.0系统后,所有的隐式广播都不允许静态注册,隐式广播是指那些没有具体指定发送到哪个应用程序的广播,大多数系统广播都属于隐式广播。
- 静态的BroadcastReceiver一定要在AndoridManifest.xml中注册,并添加intent-filter标签声明对应的action
发送自定义广播
发送标准广播
- 构建Intent对象,并把要发送的广播的值传入
- 调用Intent的setPackge()方法,传入当前包名【默认发送的都是隐式广播,所以这里指定包名,使其成为显示广播】
- 调用sendBroadcast()方法将广播发送出去
发送有序广播
- 使用sendOrderedBroadcast()方法发送intent
- 通过android:priority属性给Receiver设置优先级
- 如果在优先级高的Receiver中调用abortBroadcast()方法,就会截断该广播