Android BroadcastReceiver 广播接收者基本用法

广播是什么?

  • 广播有系统广播和应用广播
    • 系统广播
      系统自己在很多时候都会发送广播,比如电量低或者充足,刚启动完,插入耳机,输入法改变等, 发生这些时间,系统都会发送广播,每个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的生命周期
    动态:注册和注销期间

其他

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值