为什么Android中动态注册的标准Broadcast收不到?

问题描述 投票:0回答:1

我的代码片段: `私有变量 logoutReceiver:广播接收器? = 空

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    logoutReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            LogUtils.d("action--->")
        }
    }


    val filter = IntentFilter()
    filter.addAction("com.example.broadcast.MY_NOTIFICATION")
    requireContext().registerReceiver(logoutReceiver!!, filter)
    LogUtils.d("register")

    Handler().postDelayed({
        Intent().let {
            it.action = "com.example.broadcast.MY_NOTIFICATION"
            requireContext().sendBroadcast(it)
            LogUtils.i("send")
        }
    }, 2000)
}

override fun onDestroy() {
    super.onDestroy()
    if (logoutReceiver != null) {
        requireContext().unregisterReceiver(logoutReceiver!!)
        LogUtils.e("unregister")
    }

}`

问题是 onReceive() 没有被调用,但是当我用 LocalBroadcastManager 替换 requireContext() 时,它运行良好,compileSdkVersion 是 33,是否需要在新的compileSdkVersion 中添加任何权限?

我用 LocalBroadcastManager 替换 requireContext(),效果很好

android broadcastreceiver
1个回答
0
投票

我已经使用相同的compileSdkVersion尝试了您的代码,它也可以与requireContext()一起使用,但是onReceive在发送2分钟后命中。也许这个问题与 Handler.postDelayed()

© www.soinside.com 2019 - 2024. All rights reserved.