在Android中,一个应用可以对来自系统或者其它应用的广播进行注册,从而获取到自己希望获取到的广播信息,以此完成应用的某些业务逻辑。本文主要介绍Android中两种广播的注册方式。
静态注册
静态注册需要在AndroidManifest.xml中注册相关信息,包括自己需要接收的广播协议。
<receiver android:name=".StaticBroadCast">
<intent-filter>
<action android:name="android.intent.action.IS_TIME_TO_SLEEP"/>
</intent-filter>
</receiver>
其次创建相关类对接收到广播后的业务逻辑操作进行编写。
/**
* 静态注册装波接收器
*/
class StaticBroadCast: BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
//接收到相应广播时做相关业务操作
TODO("Not yet implemented")
}
}
动态注册
动态注册需要在需要的关键类中进行手动注册,才可以接受广播,具体方法如下
/**
* 动态注册
*/
class BroadCastTestActivity:Activity() {
private val DYNAMIC_BROADCAST = "com.lalla.test"
private val broad = MyBroad()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btn_sendbroad.setOnClickListener(View.OnClickListener {
val intent =Intent(DYNAMIC_BROADCAST)
intent.putExtra("content","动态广播")
sendBroadcast(intent)
})
}
override fun onStart() {
super.onStart()
val filter = IntentFilter()
filter.addAction(DYNAMIC_BROADCAST);
registerReceiver(broad,filter)
}
override fun onStop() {
super.onStop()
unregisterReceiver(broad)
}
/**
* 重写继承Broadcast Receiver
*/
inner class MyBroad:BroadcastReceiver(){
override fun onReceive(context: Context?, intent: Intent?) {
val broadCastData:String? = intent?.getStringExtra("content")
show_data.setText(broadCastData)
}
}
}
显而易见,在onStart()中完成了广播注册,并在onStop()中取消注册,同样通过广播接收器对接收到广播后进行相关业务逻辑的处理。
二者区别
静态广播即使在应用销毁后仍然能接收到广播,从而调起应用进行相关业务逻辑;而动态广播因为随着在应用某个活动的销毁而销毁,所以在应用销毁的情况下不再接受广播。