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: 这里写数据处理的代码
                }
            }
        }
    }

注意

  1. 在较高版本(Android 8+)需要以动态方式进行注册广播接收器,否则无效。

摸🐟从未停止,努力从未开始。