广播是什么?
广播有系统广播和应用广播
系统广播 系统自己在很多时候都会发送广播,比如电量低或者充足,刚启动完,插入耳机,输入法改变等, 发生这些时间,系统都会发送广播,每个APP都会收到。 应用广播 应用自定义一些广播,用于进程间通信 例如:应用程序可以发送广播来让其他的应用程序知道一些数据已经被下载到设备,并可以为他们所用。 广播接收者(BroadcastReceiver) Android四大组件之一,通信的一种手段,广播接收者用于接收来自其他应用程序或者系统的广播消息。
静态注册
class MyReceiver : BroadcastReceiver ( ) {
override fun onReceive ( context: Context, intent: Intent) {
val data = intent. getStringExtra ( "key" )
Log. d ( "TAG" , "onReceive: data=$data " )
}
}
静态注册
android:enabled 系统是否可以实例化广播接收器;如果可以,则为“true”,如果不可以,则为“false”。默认值为“true”。 application元素有自己的 enabled 属性,该属性会应用于所有应用组件(包括广播接收器)。要启用广播接收器,application 和 receiver 属性都必须为“true”。如果其中一个属性为“false”,则表示广播接收器已停用;无法对其进行实例化。 android:exported 广播接收器是否可以接收来自其应用外部来源的消息 - 如果可以,则为“true”,如果不可以,则为“false”。
< receiver
android: name= " .MyReceiver"
android: enabled= " true"
android: exported= " false" />
fun onClick ( view: View) {
val intent = Intent ( this , MyReceiver:: class . java)
. putExtra ( "key" , "zhangyu" )
sendBroadcast ( intent)
}
动态注册
private const val TAG = "MyReceiverDynamic"
class MyReceiverDynamic : BroadcastReceiver ( ) {
companion object {
const val ACTION = "com.zhangyu.mybroadcast.intent.action.MyReceiverDynamic"
}
override fun onReceive ( context: Context, intent: Intent) {
val data = intent. getStringExtra ( "key" )
Log. d ( TAG, "onReceive: data=$data " )
}
}
private val broad = MyReceiverDynamic ( )
override fun onStart ( ) {
super . onStart ( )
registerReceiver ( broad, IntentFilter ( MyReceiverDynamic. ACTION) )
}
override fun onDestroy ( ) {
super . onDestroy ( )
unregisterReceiver ( broad)
}
fun onClick ( view: View) {
val intent = Intent ( MyReceiverDynamic. ACTION)
. putExtra ( "key" , "zhangyu" )
sendBroadcast ( intent)
}
静态动态注册的区别
创建阶段 动态:需要声明一个ACTION 注册阶段 静态:Manifest中注册 动态:在需要的地方使用registerReceiver()和unregisterReceiver() 作用范围 静态:整个App的生命周期 动态:注册和注销期间
其他
参考资料