- 标准广播
异步、效率高 - 有序广播
同步执行,优先级高的 BroadcastReceiver 先收到广播信息,调用 abortBroadcast() 截断正在传递的广播
注册广播
- 动态注册
class MainActivity : AppCompatActivity() {
lateinit var timeChangeReceiver: TimeChangeReceiver
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val intentFilter = IntentFilter()
intentFilter.addAction("android.intent.action.TIME_TICK")
timeChangeReceiver = TimeChangeReceiver()
registerReceiver(timeChangeReceiver, intentFilter)
}
override fun onDestroy() {
super.onDestroy()
unregisterReceiver(timeChangeReceiver)
}
inner class TimeChangeReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
Toast.makeText(context, "Time has changed", Toast.LENGTH_SHORT).show()
}
}
}
- 静态注册
→New→Other→Broadcast Receiver
Exported属性表示是否允许这个BroadcastReceiver 接收本程序以外的广播
Enabled属性表示是否启用这个BroadcastR eceiver
Android Studio 自动在 ANdroidManifest.xml文件中完成注册
发送广播
- 发送标准广播
val intent = Intent("com.example.broadcasttest.MY_BROADCAST")
intent.setPackage(packageName)
sendBroadcast(intent)
默认发送隐式广播,调用 setPackage() 传入要接收广播的应用程序包名,从而将它变成了显式广播,否则静态注册的BroadcastReceiver将无法接到这条广播。
- 发送有序广播
sendOrderedBroadcast(intent, null)
网友评论