【发布时间】:2012-06-26 03:29:22
【问题描述】:
在 Stack Overflow 的某个地方,有一天我发现了以下代码,我对我的应用程序进行了一些调整:
private void updateWidget() {
AppWidgetManager widgetManager = AppWidgetManager.getInstance(ctx);
ComponentName widgetComponent = new ComponentName(ctx, MyAppWidgetProvider.class);
int[] widgetIds = widgetManager.getAppWidgetIds(widgetComponent);
Intent update = new Intent();
update.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, widgetIds);
update.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
ctx.sendBroadcast(update);
}
这应该以编程方式刷新应用程序小部件的所有实例。 ctx 是我在onCreate() 中设置一次的Activity 的上下文(this)。上面的方法是在Activity的onStop()方法中调用的。
不幸的是,当它被调用时,它会用其他应用程序的小部件(例如 AP News)替换应用程序的小部件 - 至少在一段时间内。
怎么会这样?代码有问题吗?
谢谢!
编辑#1:更清楚地指出这一点:我已经定义了自动刷新的时间间隔。但除此之外,我想不时从Activity 更新小部件。 This question 表示这也是可能的。
编辑#2:我刚刚看到错误的小部件只显示了几秒钟。之后,我自己的应用程序的小部件再次显示。
【问题讨论】:
-
过去我在使用小部件时遇到过一些问题。我所做的只是将更新代码移动到服务中。当我需要更新时,启动该服务。我不确定,但问题已经解决。你能试试吗?
-
非常感谢,这解决了我的问题!不知道为什么(你呢?),但它奏效了。所以
AppWidgetManager.getAppWidgetIds()不是问题,它工作正常,因为这些 id 然后传递给我的服务。您可以将其写为答案以便我接受吗? :) -
很高兴它能帮助你。但我真的不知道原因,所以我不能将其发布为答案。不客气:-)
-
哦,当然可以。虽然不完整,但这是最好的答案。所以请张贴! ;) 答案并不总是需要解释,最重要的是它有效。