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

Android widget - Where to register for explicit broadcasts

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

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

看起来静态寄存器不再是我的小部件从我的主应用程序接收自定义意图广播的选项,因为它们是独立的实体,并且从文档看来 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

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

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() returns 后不久消失,如果没有任何东西保留该进程,例如前台服务。这就是为什么使用清单注册接收器和显式广播是更好的解决方案。