3

在 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是我在 中设置Activity的上下文 ( this) onCreate()。上面的方法在Activity'sonStop()方法中被调用。

不幸的是,当它被调用时,它会用其他应用程序的小部件(例如美联社新闻)替换应用程序的小部件 - 至少在一段时间内。

这怎么可能发生?代码有问题吗?

谢谢!

编辑#1:更清楚地指出这一点:我已经定义了自动刷新的间隔。但除此之外,我想Activity不时更新小部件。这个问题表明它也是可能的。

编辑#2:我刚刚看到错误的小部件只显示了几秒钟。之后,我自己的应用程序的小部件再次显示。

4

3 回答 3

4

过去我在使用小部件时遇到了一些问题,并且已经解决了这些问题。我真的不知道我的解决方案为什么对我有用。因为它适用于Marco W.,所以我把它放在这里:我所做的只是将更新代码移动到服务中。当我需要更新时,启动该服务。同样,我不确定,但问题已经解决。

谢谢 Marco,我对 Android 有了更多的经验。这很有趣 :-)

于 2012-07-02T12:51:21.173 回答
0

notifyAppWidgetViewDataChanged我通过使用允许更新所有小部件的方法解决了这个问题,我可以给出的解释是,该方法可以StackView在修改集合视图包含的数据后更新集合视图(在我的情况下)。

于 2014-08-19T14:20:18.097 回答
-1

您是否有理由在小部件之外运行更新功能?在我看来,使用 updatePeriodMillis 属性会更有意义吗?您可以将该属性设置为您希望小部件调用 onUpdate() 的频率,然后它可以提供更新的信息。

http://developer.android.com/guide/topics/appwidgets/index.html#MetaData

于 2012-06-24T18:15:58.657 回答