从应用程序的主要活动中调用小部件的 onUpdate 方法

Posted

技术标签:

【中文标题】从应用程序的主要活动中调用小部件的 onUpdate 方法【英文标题】:Call widget's onUpdate method from the app's main activity 【发布时间】:2011-06-23 22:28:08 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

我对 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()));

【讨论】:

以上是关于从应用程序的主要活动中调用小部件的 onUpdate 方法的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Activity 中获取小部件 ID

如何创建具有配置活动的应用小部件,并首次对其进行更新?

当小部件具有配置活动时,无法从小部件启动活动

Android:使用 ListView 和 Service 从应用小部件开始活动

Android 通过单击不同的按钮从主页小部件打开 2 个不同的活动

android 小部件开始一个新的活动