Android 小部件 - 在哪里注册显式广播

标签 android broadcastreceiver android-widget

正在开发一个 Android 小部件,该小部件需要能够从我安装在设备本身上的应用程序接收广播。基本上希望能够在某些事件发生时通知小部件,以便它们可以更新而不是等待整整 30 分钟。

自定义操作:“com.example.UPDATE”

对于我的小部件来说,静态寄存器似乎不再是从我的主应用程序接收自定义 Intent 广播的选项,因为它们是独立的实体,而且从文档来看,Google 似乎锁定了静态寄存器的可能性。无论如何,我不想指定单个接收器,因为我希望能够支持多个小部件,并且每个小部件都可以在需要时接收广播。

为小部件的上下文动态注册广播接收器的正确方法是什么?

我是否会在我的 AppWidgetProvider 的 onUpdate 函数中注册它,并确保它在每次 onUpdate 被调用时注册?这提供了一个我可以将其注册到的上下文。

最佳答案

Working on an Android widget that needs to be able to receive a broadcast from my application installed on the device itself.

您的行为就好像有两个独立的应用程序:“真实”应用程序和应用程序小部件的单独应用程序。我强烈建议您不要走那条路,而是拥有一个应用程序。在这种情况下,您的应用可以在希望更新应用小部件的 UI 时简单地使用 AppWidgetManager

如果您确信拥有两个独立的应用程序是正确的方法,请继续阅读。

It looks like static register isn't an option anymore for my widget to receive custom intent broadcasts from my main application since they are separate entities and from the documentation it looks like Google locked down what is possible with static registers

仅适用于隐式广播。在您的情况下,您可以使用显式广播,您可以在其中标识特定的应用程序或组件来接收广播。 Intent 上的 setPackage() 应该足够了。

What would be the right way to dynamically register a broadcast receiver for a widget's context?

实现一个前台服务并让它注册广播。然后它可以使用 AppWidgetManager 来更新您的应用小部件。由于用户不会喜欢这样,我建议您不要走这条路。

Would I register it in the onUpdate function of my AppWidgetProvider and just make sure its registered each time the onUpdate gets called?

不,因为您的进程将在 onUpdate() 返回后不久消失,如果没有任何东西保留该进程,例如前台服务。这就是为什么使用 list 注册接收器和显式广播是更好的解决方案。

关于Android 小部件 - 在哪里注册显式广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68896362/

相关文章:

android - Phonegap 版本 : Whitelisting Google Map Domains for API v3

java - 字节[]到位图与位图到字节[] : Which is Faster?

android - 在特定时间自动更改 Android 配置文件模式

Android 广播接收器未在 RECEIVE_BOOT_COMPLETED 上运行服务

android - [cocos2dx android]使用来自Bitmap的原始数据渲染Sprite

android - 为什么我的 TabHost 的 FrameLayout 的唯一 child 加载了 visibility = View.GONE?

Android:无法保存和读取 Bundle 中的所有值

android - 如何在代码中设置 child 体重?

android - 如何更改 android spinner popupBackground

android - 如何在安卓平板电脑中隐藏底部系统栏