Context
sendBroadcast(Intent intent) 发送一般广播
sendOrderedBoardcast(Intent intent) 发送有序广播
registerReceiver(receiver,intentFilter) 注册广播接收器
unResisterReceiver(receiver) 解注册广播接收器
BroadcastReceiver
onReceiver(Context context,Intent intent) 接收到广播的回调
abortBroadcast() 中断广播的继续传播
boolean isOrderedBroadcast() 判断是否是有序广播
系统常见的广播:
开机完成广播: android.provider.Telephony.SMS_RECEIVED
收到短信广播: Intent.ACTION_BOOT_COMPLETED
应用被卸载广播 Intent.ACTION_PACKAGE_REMOVED
手机锁屏 Intent.ACTION_SCREEN_OFF
手机开锁 Intent.ACTION_SCREEN_ON
注册广播接收器
静态注册(配置清单文件)
<receiver android:name="BroadcastReceiver全类名"
<!--指定当前receiver的优先级,范围1-1000,越大优先级越高-->
<intent-filter android:priority="1000"/>
<action android name="......">
</intent-filter>
</receiver>
动态注册(纯代码)
XxxBroadcastReceiver receiver = new XxxBroadcastReceiver();
IntentFilter filter = new IntentFilter(action);
registReceiver(receiver,filter);
静态注册和动态注册的比较
| 静态注册 | 动态注册 |
注册方式 | 配置清单文件 | java代码 |
注册的时间 | 应用安装成功 手机开机完成 注册时不会创建对象, 接收到广播才创建 | 执行registerReceiver(receiver ,intentFilter) 注册就创建对象 |
生命结束的时间 (解注册) | 应用卸载 对象执行onReceiver()后就回收了 | 执行unregisterReceiver() (activity退出必须解注册) 解注册后对象被回收 |
应用情景 | 需要监听的时间为 应用的整个生命过程 | 只服务于某个Activity/service |
无序广播与有序广播
| 无序广播 | 有序广播 |
方式 | context.sendBroadcast(Intent intent) | context.sendOrderedBroadcast(Intent intent) |
多人接收时是否有序 | 无序,都会同时执行 | 有序,根据优先级和注册先后依次执行 |
是否可以中断 | 不可以 | 可以,通过br.abortBroadcast() 中断后,后面的接收器不能接收到此广播 |