Android的广播是什么?
Android 应用与 Android 系统和其他 Android 应用之间可以相互收发广播消息,这与发布-订阅设计模式相似。可以把它想象成一个 '收音机' , 你可以配置接收特定的 '频道' (广播消息的类型), 当 '频道' 里有 '声音' (广播消息) 传来的时候, '收音机' 就会 '响' (执行接收器里的代码)。
如何发送广播?
第一个APP
// 这里创建一个意图(Intent),并指定一个“频道”
val intent = Intent("BROADCAST_ACTION")
// 给广播装入要携带的数据
intent.putExtra("data", "123456")
// 直接发送广播
sendBroadcast(intent)
如何接收广播?
第二个APP
// TODO 其他代码
// 在这里注册广播接收器
@SuppressLint("InlinedApi")
override fun onCreate(savedInstanceState: Bundle?) {
// TODO 其他代码
// 广播过滤器
val intentFilter = IntentFilter("BROADCAST_ACTION")
// 注册广播,RECEIVER_NOT_EXPORTED表示非导出
// broadcastReceiver表示下方声明的broadcastReceiver对象
registerReceiver(broadcastReceiver, intentFilter, RECEIVER_NOT_EXPORTED)
// TODO 其他代码
}
// 为了方便,我直接在Main Activity中声明了一个内部Kt类,并继承了BroadcastReceiver类,BroadcastReceiver是基本的广播接收器的类
private val broadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
// 获取频道
val action = intent?.action
// 判断频道是否为上面定义的频道
if (action != null && action == "BROADCAST_ACTION") {
// 获取广播携带的数据
val data = intent.getStringArrayExtra("data")
if (data != null) {
// TODO: 这里写数据处理的代码
}
}
}
}
注意
- 在较高版本(Android 8+)需要以动态方式进行注册广播接收器,否则无效。
Comments | 2 条评论
牛啊 牛啊
@喊大哥 我嘞个G