如何从 BroadcastReceiver 向 Activity 或 Fragment 发送消息

2023-12-02

我有一个接收器,它执行呼叫详细信息保存任务,例如存储来电、去电等。所有这些详细信息都会保存到 sqlite DB 中。如果我的活动没有运行,那就没问题了。

有时,当我的活动正在运行时,我会接到一些来电。接收器运行并将数据存储到数据库。 UI 不会刷新,因为它永远不知道数据库中的更改。

在这里,我需要手动告诉接收者,活动是否正在运行刷新屏幕。如何在android中实现这个过程。

我对这部分有点困惑


您可以使用 LocalBroadcastManager 向您的 Activity 发送本地广播(比使用全局广播更高效、更安全):

Intent intent = new Intent(action);
LocalBroadcastManager mgr = LocalBroadcastManager.getInstance(context);
mgr.sendBroadcast(intent);

http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html

您的 Activity 必须在 onStart 中注册 BroadcastReceiver 并在 onStop 中取消注册:

private BroadcastReceiver mBroadcastReceiver;

mBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        // do your thing
    }       
};

LocalBroadcastManager mgr = LocalBroadcastManager.getInstance(this);
mgr.registerReceiver(mBroadcastReceiver, new IntentFilter(action));

在 onStop 中:

mgr.unregisterReceiver(mBroadcastReceiver)

现在这就是 Android 的官方方式。我当然更喜欢使用像 Otto 或 EventBus 这样的事件/消息总线(https://github.com/greenrobot/EventBus)。您可以使用它们在应用程序中的不同组件之间广播消息/事件。优点是您不需要访问上下文(就像使用广播时一样),它速度更快,并且迫使开发人员进行面向对象编程(因为事件始终是对象)。一旦开始使用事件总线,您将永远不会回头查看本地广播,并且您将替换应用程序中使用的许多有时混乱的观察者/侦听器模式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 BroadcastReceiver 向 Activity 或 Fragment 发送消息 的相关文章

随机推荐

  • 替换 JSON 中的属性值

    如果我有一个看起来像这样的 JSON 结构 var user map width 785 height 791 image name image png size width 32 properties firstName Bob last
  • 我可以在 UITextField 中放置不可编辑的文本吗

    我想在 UITextField 内放置一些固定文本 但在插入点之前 有点像这样 他 走向 其中 towaards 是可编辑部分 重点是在上下文中显示可编辑文本 这可能吗 和 或有更好的选择吗 我想你可以通过实施来做到这一点UITextFie
  • 如何使用 opencv android 通过触摸事件提供流体效果/调整位图大小

    我是 OpenCV4Android 和 Android NDK 的新手 努力实现 相对于图像上的触摸点拉伸图像 将头发放在脸上并使用触摸事件相应地拉伸它 例如 虚拟化妆应用程序 问题 使用 Java 时 通过从位图获取矩阵并在触摸事件上重新
  • JavaScript 计算返回 NaN 作为结果

    我正在开发一个 html 页面 它需要日期并显示日期 我正在使用一个称为泽勒同余的公式 但在 JavaScript 中 公式返回结果 NaN 我用谷歌搜索了这个问题 无法找出解决方案 这是接受值的 html
  • 有没有办法编写通用代码来查找 Go 中切片是否包含特定元素?

    我想知道是否有一种通用的方法来编写代码来判断切片是否包含元素 我发现它通常很有用 因为有很多逻辑来首先判断特定元素是否已经在切片中 然后决定要做什么接下来做 但似乎没有一个内置的方法 看在上帝的份上 为什么 我尝试使用interface 这
  • java 1.6 中 String.split 的行为?

    我的代码是 String s 1 23 System out println s split length 并给出输出5 的源代码split is public String split String regex return split
  • 行组内的 ssrs 列可见性

    我有一份报告 其中有多个组 主要在行和一个列组中 但我需要根据所选参数显示某些列 如图所示 当我右键单击专业列时 列可见性不可用 有人可以帮我解决这个问题吗 thanks source ravidowluri com 我自己解决了这个问题
  • Git 子树合并在合并简单的上游更改时报告冲突

    我开始学习 git 1 8 2 中的子树合并 我创建了一个简单的示例来测试将第三方存储库迁移到主项目的更改 我正在关注6 7 Git 工具 子树合并例子 子 项目作为子目录包含在 主 项目中 对 子 项目进行更改后 当我尝试将更改合并到 主
  • EGit 和 GitHub 出现“Auth Failed”错误

    我已经在 Eclipse Helios 上安装了 EGit 插件 并且尝试将其与我的 GitHub 帐户一起使用 但是当我尝试配置它时 出现 Auth Failed 错误 我一直在谷歌上搜索 但没有运气 这似乎是我的密码有问题 但 AFAI
  • “AdaptiveCard”不包含“FromJson”的定义 - Microsoft Bot Framework

    我尝试创建一个自适应卡 从 json 解析它 正如中提到的https learn microsoft com en us adaptive cards create libraries net example parse from json
  • 通过 iisnode 在 iis 上使用 Node.js Express

    我有一个 Node js Express 应用程序 我需要让它在本地 IIS 服务器上运行 以便我可以向它发送有效的 http 请求并处理响应 我使用的是 win 10 和 IIS 10 我遵循了有关使用 iisnode 的不同指南 以便在
  • Katalon studio Java jar 文件

    我想在 Katalon studio 中使用我的 Java 代码 但我不知道哪个 jar我必须导入 Katalon 的文件 我阅读了 Katalon 提供的所有文档 并阅读了所有有关 Katalon 中 java 代码使用的论坛帖子 我没有
  • Heroku 500 内部服务器错误

    我正在开发 Ruby on Rails 应用程序并尝试使用 Heroku 部署它 但是我遇到了一些无法解决的错误 我已经查看了 Heroku 日志 可以看到详细信息 但我不知道出了什么问题 在我看来 问题来自我的 header html e
  • Android - 从另一个活动控制按钮

    我有两项活动 主页活动包含一个列表视图 其中有两个名为checkIn and 方向 当单击 checkIn 按钮时 它会执行一些操作 例如 A 单击方向按钮时 它会启动方向活动 因此 在方向活动中 如果满足某些条件 则会出现一个警报框 询问
  • static const(非整数)成员初始化语法背后的基本原理?

    我知道如何初始化不是整数的静态成员 但我想知道这种语法背后的基本原理是什么 我希望能够将值放入类中 就像使用整数成员一样 class A static const int i 3 我意识到 如果我更改该值 这可能意味着更多的重建 因为它是标
  • Rails 3 电子邮件中的 CSS 图像

    我正在尝试使用 Rails 3 和 Action Mailer 发送一封电子邮件 电子邮件发送得很好 但我希望它采用 HTML 格式 并带有一些基本样式 其中包括背景图像 我知道图像可能会被阻止 直到用户允许显示它们 但我仍然认为最好链接到
  • 宽松的原子规则有什么(轻微)差异?

    看到赫伯 萨特斯表现出色后talk about 原子武器 我有点困惑轻松原子例子 我随身携带了一个atomic in the C 内存模型 SC DRF 无数据竞争的顺序一致 在加载 读取时执行 获取 据我所知 对于负载 和存储 默认值是s
  • 从 Drupal 网站创建 Iframe

    我有一个 drupal 网站 我想生成一个包含我的 drupal 站点内容的 Iframe 其他站点可以嵌入该内容 我认为如何实现这一目标 Method 1 创建一个独立于 drupal 引擎的 php 脚本 导入配置文件 从而获得对数据库
  • 使用 http.NewRequest POST 数据失败

    我正在尝试使用以下命令将数据从一个 golang 服务传递到另一个 golang 服务http NewRequest 为此 我使用了以下代码 httpClient http Client userserviceUrl http user 7
  • 如何从 BroadcastReceiver 向 Activity 或 Fragment 发送消息

    我有一个接收器 它执行呼叫详细信息保存任务 例如存储来电 去电等 所有这些详细信息都会保存到 sqlite DB 中 如果我的活动没有运行 那就没问题了 有时 当我的活动正在运行时 我会接到一些来电 接收器运行并将数据存储到数据库 UI 不