前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 广播「BroadcastReceiver」接收不到「Intent」的信息

Android 广播「BroadcastReceiver」接收不到「Intent」的信息

作者头像
圆号本昊
发布2021-09-24 11:28:28
1.3K0
发布2021-09-24 11:28:28
举报
文章被收录于专栏:github@hornhuang

BroadcastReceiver & Intent

我们在工作的过程中,经常会使用到 BroadcastReceiver 机制,用来向活动发送消息,更新服务内的数据信息。但是我在这一过

程中发生了一个低级错误,我向广播发送两种 Action 类型的 Intent,结果始终接收不到,或者只能接收到一个 Intent 信息

预测效果:

进度条

但是实际:

进度条满了之后无法关闭:


进过排查后我发现了问题所在:

在广播注册的地方,我只为 Receiver 添加了修改进度条的 Action ,而没有添加打开、关闭窗口的 Action:

代码语言:javascript
复制
    private fun iniBroadCast() {
        val manager = LocalBroadcastManager.getInstance(this)
        val broadcastReceiver = MyBroadcastReceiver(progressDialog)
        val intentFilter = IntentFilter()
        intentFilter.addAction(IntentManager.ACTION_TYPE_THREAD)
        manager.registerReceiver(broadcastReceiver, intentFilter)
        val intent = Intent(this, MyIntentService::class.java)
        startService(intent)
    }

可以看到 我只添加了 intentFilter.addAction(IntentManager.ACTION_TYPE_THREAD)

但是我在服务中,却是分两个 Action 发出的,如下 ⬇️

代码语言:javascript
复制
    private void sendIfoToBroadCast(String serviceStatus){
        Intent intent1 = new Intent(IntentManager.ACTION_TYPE_SERVICE);
        intent1.putExtra(IntentManager.INTENT_STATUS_SERVICE, serviceStatus);
        manager.sendBroadcast(intent1);
    }

    private void sendIfoToBroadCast(String serviceStatus, int progressStatus){
        Intent intent = new Intent(IntentManager.ACTION_TYPE_THREAD);
        intent.putExtra(IntentManager.INTENT_STATUS_SERVICE, serviceStatus);
        intent.putExtra(IntentManager.INTENT_PROGRESS_SERVICE, progressStatus);
        manager.sendBroadcast(intent);
    }

所以错误原因就是我在为 BroadcastReceiver 进行组册时,少添加了 Action


解决

没啥难度加上就是:

代码语言:javascript
复制
    private fun iniBroadCast() {
        val manager = LocalBroadcastManager.getInstance(this)
        val broadcastReceiver = MyBroadcastReceiver(progressDialog)
        val intentFilter = IntentFilter()
        intentFilter.addAction(IntentManager.ACTION_TYPE_SERVICE)
        intentFilter.addAction(IntentManager.ACTION_TYPE_THREAD)
        manager.registerReceiver(broadcastReceiver, intentFilter)
        val intent = Intent(this, MyIntentService::class.java)
        startService(intent)
    }

如上,完美解决! 测试 Demo 地址:点击前往 https://github.com/FishInWater-1999/android_four_major_components

如果也解决了你的问题,不妨给个赞呗,么么哒~~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/06/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • BroadcastReceiver & Intent
    • 预测效果:
      • 但是实际:
        • 进过排查后我发现了问题所在:
          • 解决
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档