将广播意图从服务发送到应用程序类

2023-12-09

是否可以将意图从服务发送到应用程序类?不是活动?

我不知道在特定时间将运行什么活动,因此我在活动类中添加一个布尔标志,用于检测活动并根据收到的广播发送适当的数据。


If your Service是活跃的,那么你的Application类是active以及。

否则你将无法使用getApplicationContext().

虽然我对此表示怀疑永远运行的服务有一种非常干净的方法可以使Service与某个人沟通Activity,最后一个当前是否处于活动状态。

这种干净的方式称为本地广播管理器.

The Activity意味着接收数据应该注册一个BroadcastReceiver in onResume()并将其取消注册onPause().

你实例化你的BroadcastReceiver在您的活动中onCreate()

this.localBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Do what you have to do here if you receive data from the Service.
    }
}

您创建一个过滤器,以便您的活动仅监听某种类型的信号。

private IntentFilter notifIntentFilter new IntentFilter("com.you.yourapp.MY_SIGNAL");

in onResume()

LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(this.localBroadcastReceiver, notifIntentFilter);

in onPause()

LocalBroadcastManager.getInstance(getApplicationContext()).unregisterReceiver(this.localBroadcastReceiver);

现在,每当您想要向 Activity 发送数据时,您的 Service 都可以调用:

final Intent intent = new Intent();
intent.setAction("com.you.yourapp.MY_SIGNAL");
// put your data in intent

LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);

If your Activity is awake,它将响应信号。否则,如果它在后台,或者它没有被实例化,它就不会。

您可以将此模式应用于任意数量的活动。


Still, 我从来没有用过这里面的Application班级。但您可以尝试在那里注册您的接收器。它可能会起作用,因为如果Application类被破坏了,BroadcastReceiver也被破坏,因此可能也未注册。

关键是,如果您的应用程序被破坏,您的服务也将被终止。除非你在另一个进程中启动它。但随后它将拥有自己的实例Application;这是一件复杂的事情,您现在可能不想详细了解......


重要的: 自从Application类不绑定到任何 UI 组件,您可以直接在服务中执行您需要的任何操作。如果您需要操作 UI,那么上述模式将适合您。

请阅读有关新Android 的后台限制.


Edit:

哦,是的,如果您需要您的服务调用您的服务中声明的函数Application类,你可以这样做

((MyApplication) getApplication()).myFunctionToHandleData(Intent intent);

虽然我不太明白你的问题,但上述任何一种方法都应该适合你。

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

将广播意图从服务发送到应用程序类 的相关文章

随机推荐

  • 访问数组作业的任务 ID

    我通常使用类似以下内容来提交数组作业 bin bash sbatch lt
  • MongoDB SSL 副本设置问题 - 证书不受支持

    尝试在 Ubuntu 18 04 mongo 版本 4 0 18 上设置 3 节点 mongodb 服务器副本 gl1 192 168 1 30 gl2 192 168 1 31 gl3 192 168 1 33 使用同一网络上的内部 CA
  • 在 winform 应用程序中打开带有表单名称的表单

    我想问一下在winform c 中如何使用帮助或类名打开表单 我有三种不同的形式 用户管理 团体管理 位置管理 我从数据库获得了这三种形式的许可 在菜单中单击我用表单名称填充标签属性 如下所示 tsmMain Tag item Permis
  • Android 10 中取消了前台服务

    在Android 10中 一些制造商在电池优化设置中提供了新功能 见图 当屏幕关闭一段时间后 我的前台服务被操作系统杀死 我已经使用了带通知的前台服务 当所有设备的屏幕都打开时 此代码可以正常工作 我在 OnePlus 和 realMe 设
  • 从 VCS 克隆后的 Pycharm 项目错误:解释器中“无内容可显示”

    我有一个项目 我为其设置了一个pipenv环境为Python 3 7 它工作得很好 直到我cloned来自 VCS 中的 master 我之前已经为同一个项目做过很多次了 但我的最后一个克隆搞砸了一些事情 我的所有项目文件似乎都在项目之外
  • Cocoa 中是否有一些功能可以用自然语言显示时间间隔?

    我正在寻找的是一个可以用自然语言显示时间间隔的 Cocoa 或第三方 类 例如 10 秒前 1小时前 2天前 你知道有什么可以帮助我完成这项任务 而无需自己编写并陷入 if else 地狱吗 我最初指出的那个似乎不再存在了 但正如所指出的那
  • 根据另一列更改一列的值(对于某些行)

    我有一个数据框 df ID lt c 1 2 3 4 5 category lt c Shirts Shirts Shirts Sweaters Sweaters subcategory lt c V Neck V Neck Round S
  • 在 PHP 中将数据库结果回显为 html 代码的最佳方法是什么?

    当我在数据库中有这样的值时 foo 我怎样才能在不与html代码冲突的情况下回显它 notice
  • cv2.VideoWriter 的输出不正确。速度更快了

    我正在尝试使用 opencv 的 cv2 VideoWriter 录制一段视频一段时间 问题是输出不正确 例如 10秒的视频只有2秒 并且播放速度更快 这是我的代码 欢迎任何建议或想法 另外 另一个问题是输出视频没有声音 谢谢 主机 树莓派
  • 从密码生成密钥对

    我想使用基于密码的私钥的非对称加密 要求是提供的安全级别必须与 1 使用基于密码的对称加密 2 以 常规 方式使用非对称加密相同 我将不得不在 Java 中使用它 但答案可以是通用的 我知道我可以生成密钥对并使用基于密码的对称密钥加密私钥
  • 是否有 .NET StringBuilder 功能版本的开源(非 GPL)实现?

    我正在寻找 StringBuilder 或等效项的功能 如非命令式 实现 我见过一些函数式数组的实现 但它们本身不支持插入 开源 非 L A GPL 的奖励 F 的奖励 但如果需要 我可以从 Haskell OCaml SML 进行翻译 欢
  • 经典 ASP - 将属性作为 byref 传递

    在经典 ASP 中 我有一个对象 称之为bob 那么它有一个名为name with let and get方法 我有一个函数如下 sub append byref a b a a b end sub 这只是为了更快地向变量添加文本 我也有同
  • 在 Android 中录制声音并读取振幅

    我正在尝试制作一个应用程序 记录声音一秒钟 然后从记录的声音中读取最大幅度 这是我到目前为止所拥有的 但我的应用程序崩溃了 我不明白为什么 这是我的第二个活动 我在按下 记录 按钮后从第一个活动中调用该活动 该应用程序在我的模拟器和手机上崩
  • 如何让 jquery-ui 自动完成退出 iframe?

    是否可以使自动完成 jQueryUI 的建议从一个 iframe 中出来 具有与 select 元素相同的行为 我举一个例子 http jsbin com ehidef 1 事实上 这是可以做到的 尽管一些样式是强制性的 jQueryUI
  • Autoconf 路径中存在空格

    我刚刚将一个 C 项目转换为一个 autotools 项目 并在 configure ac 中编写了几行here 当我的路径应该是 bla bla 时 构建失败并显示 sh home me bla 没有这样的文件或目录 问题是我没有在任何地
  • NSArray 对 ARC 下对象的弱引用 (__unsafe_unretained)

    我需要在 NSArray 中存储对对象的弱引用 以防止保留循环 我不确定要使用的正确语法 这是正确的方法吗 Foo foo1 Foo alloc init Foo foo2 Foo alloc init unsafe unretained
  • WPF 和 CefSharp:性能低下

    我已经成功地用 c winforms 制作了一个个人迷你浏览器应用程序 因为我想要一些更奇特的效果 所以我正在考虑制作一个 WPF 应用程序 因此 我尝试了 wiki 教程并使用浏览器设置了一个简单的 WPF 表单 但注意到它的性能很慢 当
  • C#,如何访问当前线程中在其他线程中创建的内容?

    我正在用 C 编写聊天客户端 服务器应用程序 但我遇到了线程问题 我写了这个简单的代码来显示我的问题 我使用 thread 1 来显示 Form 但它只显示了一秒钟 也许 thread 1 终止并关闭了 Form 但我 IsAlive 说它
  • C4473 结构分配警告

    我目前正在做一项作业 很好奇编译时出现的警告是什么以及如何补救 它会构建 但当我调试时 它会出现错误屏幕 下面是出现的警告 1 gt c 用户 cesteves documents c 编程 库存 库存 inventory cpp 48 警
  • 将广播意图从服务发送到应用程序类

    是否可以将意图从服务发送到应用程序类 不是活动 我不知道在特定时间将运行什么活动 因此我在活动类中添加一个布尔标志 用于检测活动并根据收到的广播发送适当的数据 If your Service是活跃的 那么你的Application类是act