广播这一章东西不是很多,而且常用的功能,在项目中已经用过了,简单记录一下。
广播类型
标准广播
就是发送一个广播,所有应用都可以同时接受到
发送广播
val intent = Intent("xxxx")
intent.setPackage(packageName) //android 8.0之后要发送显式广播,所以要添加应用包名
sendBroadcast(intent)
有序广播
就是发送一个广播,优先级高的应用先接受到,同时可以截断广播
优先级设置
AndroidManifest.xml中 <intent-filter android:priority="100">
发送有序广播
sendOrderedBroadcast(intent, null)
阻断广播
在onReceive
中调用abortBroadcast()
注册方式
静态注册
静态注册就是在AndroidManifest.xml中提前注册。然后实现receiver类就可以了。
一般常用的业务场景是,实现监听系统某广播自启动。
流程一般为如下:
- 在AndroidManifest.xml声明对应权限
- 静态注册广播
- 在intent-filter中声明要监听的广播
<intent-filter>
xxx
</intent-filter>
- 实现对应receiver类
但是需要注意的一点是,这样操作会增大内存
动态注册
动态注册是在代码中注册,使用动态注册要记得取消注册。如果不取消注册坑可能会造成内存泄漏
val intentFilter = IntentFilter()
intentFilter.addAction("xxx")
val myReceiver = myReceiver()
registerReceiver(myReceiver, intentFilter)
inner class myReceiver: BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
//xxx
}
}