从应用程序的主要活动中调用小部件的 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 方法的主要内容,如果未能解决你的问题,请参考以下文章
Android:使用 ListView 和 Service 从应用小部件开始活动