gpt4 book ai didi

android - 在启动时为应用程序小部件注册 contentobserver

转载 作者:行者123 更新时间:2023-11-29 21:46:14 26 4
gpt4 key购买 nike

当用户将我的 appwidget 添加到主屏幕时,我正在注册一个 ContentObserver。预期的行为是对我的 ContentProvider 中的基础数据的更改将触发我的 appwidget 更新。问题是如果用户随后重新启动设备,我将不再注册 ContentObserver

Android 的 AppWidget 框架似乎没有提供钩子(Hook)来在设备启动后进行任何类型的设置,因此我无法在数据上注册另一个 ContentObserver。我能想到的唯一解决方案是创建一个在 list 中注册的 BroadcastReceiver,它接收 BOOT_COMPLETED 操作。不过,我希望不必这样做。

是否有任何方法可以在启动后注册一个 ContentObserver(或进行与 AppWidgets 相关的任何其他设置),以便现有的 appwidgets 将在设备重新启动后继续正常运行? (如果可能的话,在某处有这样的样本吗?)

编辑:

它出现在启动后我的 AppWidgetProvider 被调用,并且 onEnabled 和 onUpdate 回调都发生了。它启动我的 AppWidgetService 并创建一个 RemoteViewsFactory——此时我应该注册一个 ContentObserver。

无论出于何种原因,当我的 ContentProvider 中的数据发生变化时,ContentObserver 不会触发。我不明白为什么。

最佳答案

编辑

这个答案有点过时了。仅仅为了保存一个 ContentObserver 而制作一个服务有点笨手笨脚,用户可能会觉得奇怪,一个应用程序在不理解为什么的情况下保持服务。操作系统也可以终止服务,这让您没有 ContentObserver。

当您的数据发生变化时,最好自行强制刷新您的应用小部件。 Google 在他们的 iosched 应用程序中也这样做:

// Widgets can't register content observers so we refresh widgets separately.
context.sendBroadcast(ScheduleWidgetProvider.getRefreshBroadcastIntent(context, false));

来源:ScheduleProvider ScheduleWidgetProvider

原始答案

我已经通过创建一个新的服务类解决了我自己的问题。我在 AppWidgetProvider 的 onEnabled() 回调中启动服务,并在 onDisabled() 回调中停止服务。内容观察器在服务的 onCreate() 中注册,在 onDestroy 中注销。

这种方法可以让我的所有应用程序小部件在底层数据发生变化时更新,并通过设备重启工作。

关于android - 在启动时为应用程序小部件注册 contentobserver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15768800/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com