Ich habe einige Beispiele im Internet/Buch über die App Widget gelesen, ein normales Beispiel zur Aktualisierung des Widgets ist in onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds)
Methode von AppWidgetProvider wie folgt:
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);
}
Es aktualisiert jedes Widgets in einer Schleife.
Aber jetzt muss ich ein App Widget implementieren, das in BroadcastReceiver aktualisiert wird, onReceive(Context context, Intent intent)
Methode, da keine int[] appWidgetIds übergeben werden. Also habe ich den Code wie folgt implementiert:
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);
Die Widgets wurden nicht einzeln aktualisiert, sondern alle Widgets auf einmal. Obwohl es funktionierte, wie ich wollte, aber ich war verwirrt, warum es nicht notwendig ist, alle Widgets eins nach dem anderen zu aktualisieren, wie zuvor.
Was ist der Unterschied zwischen zwei Methoden?
Kann ich eine weitere Sendung von BroadcastReceiver.onReceive()
zum Auslösen AppWidgetProvider.onUpdate()
? Und wie?