Android 中的广播机制
Android 中的广播,按照广播响应范围,可以分为应用内广播
和全局广播
。按照广播的接收方式,可以分为标准广播
和有序广播
。
广播的分类
-
响应范围
- 应用内广播:此类广播只能在应用内传播,其他应用无法获取
- 全局广播:系统中的所有广播接收器只要注册了对应的类型,都可以接收
-
接收方式
- 标准广播:一次发出,所有应用都会以无序的方式接收到广播消息
- 有序广播:所有的接收器将会按照一定的序列接收广播,且已经接收的可以终止广播的继续传递
以动态方式注册广播接收器
- 新建一个类,继承 BroadcastReceiver,重写其中的 OnReceive 方法,实现自己需要的功能
- 准备一个 IntentFilter,用于过滤要接收的消息
- 准备 Broadcast Receiver(实例化 BroadcastReceiver)
- 使用 registerReceiver 将 Broadcast Receiver 和 IntentFilter 绑定
- 在 OnDestroy 中使用 unregisterReceiver 取消广播接收器
以静态方式注册广播接收器
- 新建一个类,继承 BroadcastReceiver
- 在 AndroidManifest.xml 中注册此接收器(Android Studio 将会自动完成注册的步骤)
- 在 AndroidManifest.xml 中添加要监听的广播权限(如果需要,比如访问 wifi 的状态,开机启动等)
- 在 AndroidManifest.xml 中receiver 段中添加对应的 Intent Filter
注意:广播接收器中不应该执行那些时间很长的动作,也不应该执行那些可能引起阻塞的行为。接收器中不可以开启线程。
发送标准广播
- 准备一个 Intent,初始化内容为广播的名称(Intent 中还可以根据需要携带其他内容)
- 使用 sendBroadCast(Intent) 发送此广播
发送有序广播
- 准备一个 Intent,初始化内容为广播的名称(Intent 中还可以根据需要携带其他内容)
- 使用 sendOrderBroadCast(Intent) 发送此广播
有序广播在接受侧应该设置优先级,另外可以使用 abortBroadcast 禁止广播的继续传播
本地广播
发出的广播只能在应用内传递。
本地广播的发出
- 准备一个本地广播:LocalBroadcastManager
- 准备 Intent
- 使用 sendBroadcast 发出广播
本地广播的接收
- 准备 intentfilter
- 准备 LocalReceiver(继承自 BroadcastREceiver)
- 使用 registerReceiver 注册接收器