Android的广播从系统的角度来讲分为全局广播和本地广播:
全局广播就是系统或一个应用发出,是向整个Android系统发出的,所有的应用都会接收到此广播,全局广播又分为标准广播和有序广播;
本地广播是为了解决数据安全而引入,即本地广播只能在应用内部传播,不会传播到系统,相比之下,更安全,效率更高。
提到广播就必须有广播接收器,不然没有接收广播信息的接收器,发出广播也就没有意义了。广播接收器可以对自己要处理的广播进行注册,这样在有相应的广播发出之后就可以收到广播来处理对应的事件。注册广播的方式有两种,静态注册(即在Manifest.xml中注册)和动态注册(在代码中注册)。下面用一幅图片标识。
接下来我们实现一个监听网络变化的功能:当网络变化时系统会发出一个广播,这时候我们只需要进行注册接收就行,这是一个全局的标准的广播。
静态注册方式:
1.编写广播接收器
2.在Manifest.xml中注册要接收的网络变化信息
//1.接收网络变化的广播接收器
class ReceiveNetBroadcastByStatic: BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
//打印接收到的action
Log.i("staticRegister","Received action: ${intent?.action}")
Toast.makeText(context,"网络改变", Toast.LENGTH_SHORT).show()
}
}
<!--2.静态注册信息-->
<receiver android:name=".broadcast.ReceiveNetBroadcastByStatic">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
运行之后,手动的关闭网络,打印的日志如下:
然后我们把上面的静态的注册改为动态注册的广播,并接收:
private var receiveNetBroadcastByStatic: ReceiveNetBroadcastByStatic? = null
override fun onCreate(savedInstanceState: Bundle