【发布时间】:2011-01-19 23:02:16
【问题描述】:
我在互联网/书籍中阅读了一些关于 App Widget 的示例,更新小部件的正常示例在 AppWidgetProvider 的 onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) 方法中,如下所示:
final int N = appWidgetIds.length;
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.mywidget_layout);
updateViews.setTextViewText(R.id.mytext, "updated text");
appWidgetManager.updateAppWidget(appWidgetId, updateViews);
}
它循环更新每个小部件。
但是现在,我必须实现一个App Widget,它在BroadcastReceiver中更新,onReceive(Context context, Intent intent)方法因为没有传入int[] appWidgetIds。所以我实现了这样的代码:
RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.mywidget_layout);
updateViews.setTextViewText(R.id.mytext, "updated text");
ComponentName myComponentName = new ComponentName(context, AndroidBatteryWidgetProvider.class);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(myComponentName, updateViews);
它并没有逐个更新小部件,但实际上所有小部件都同时更新了。尽管它可以按我的意愿工作,但我对为什么不需要像以前一样逐个更新所有小部件感到困惑。
两种方法有什么区别?
我可以从BroadcastReceiver.onReceive() 发送另一个广播来触发AppWidgetProvider.onUpdate() 吗?怎么做?
【问题讨论】:
标签: android widget broadcastreceiver android-appwidget