2

我正在开发一个包含小部件的 Android 应用程序。应用程序的主界面是一个简单的活动,但是用户可以在活动中做的一些事情使得有必要更新小部件 - 即运行它的 onUpdate 方法。

如何从活动中触发此方法?查看其他 问题,我已经能够编写更改其布局的代码,但它似乎没有运行 onUpdate(因为我只剩下空布局并且没有在 onUpdate 期间添加的数据)。

非常感谢任何想法或代码示例!

4

1 回答 1

10

我对 Android 还是很陌生,但我通过三个步骤完成了这一点:

首先,我将 AppWidgetProvider.onUpdate 的内容放在一个方法 ( myUpdate(Context)) 中。

其次,我覆盖了 AppWidgetProvider.onReceive() 看起来像这样:

public void onReceive(final Context context, final Intent intent)
{
    super.onReceive(context, intent);

    if (MY_PUBLIC_STATIC_STRING.equals(intent.getAction()))
    {
        myUpdate(context);
    }
}

第三,从我的其他活动中,我只是发送了一个通用广播,其中包含针对意图设置的操作。

Intent updateWidgetIntent = new Intent(context, MyWidget.class);
updateWidgetIntent.setAction(MyWidget.MY_PUBLIC_STATIC_STRING);
context.sendBroadcast(updateWidgetIntent);

这样做的缺点是必须自己从上下文和应用小部件 id 中找到 AppWidgetManager,而不是 onUpdate 为您提供的漂亮界面。所以我怀疑这是正确的方法。祝你好运。

myUpdate(Context) 像这样开始:

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
int[] appWidgetIds =
    appWidgetManager.getAppWidgetIds(new ComponentName(context, this.getClass()));
于 2011-04-25T21:38:54.320 回答