如何从服务中更新小部件?

14

我有一个后台服务,可以配置每隔x分钟执行某些操作。我想要实现一个小部件,每当我的服务执行该操作时,它就会得到更新。然而,除了将小部件添加到主屏幕以外,我无法以任何方式调用AppWidgetProvider的onUpdate方法。

我尝试发送APPWIDGET_UPDATE意图,但是虽然AppWidgetProvider接收到了意图(因为onReceive方法被调用了),但onUpdate没有被调用。是否有任何方法可以从服务中触发小部件更新呢?

1个回答

19

只需创建一个RemoteViews,并直接在Service中更新小部件即可。您可以通过以下方式获取AppWidgetManager

AppWidgetManager mgr=AppWidgetManager.getInstance(this);

其他一切都与平常一样。

注意:如果您真的想强制现有的AppWidgetProvider执行工作,可以发送具有自定义操作的广播到您的组件,并在收到它时从onReceive()调用onUpdate()


谢谢!第二个建议就是我所做的,而且效果非常好。为什么我自己没有想到呢... :) - Franklin
onUpdate方法需要一个int[] appWidgetIds数组作为参数。当你在onReceive方法中时,你如何计算它? - Guido
2
@Guido:在 AppWidgetManager 上调用 getAppWidgetIds() :http://developer.android.com/reference/android/appwidget/AppWidgetManager.html - CommonsWare
@CommonsWare 如果你有多种类型的小部件怎么办?这种方式代码不太可扩展,因为你必须手动获取ID并更新所有小部件类型的视图。(当然你不会有几十种不同的类型) - MrJre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接