アプリ ウィジェットに関するインターネット/本でいくつかの例を読みました。ウィジェットを更新する通常の例は、onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds)
次のように AppWidgetProvider のメソッドにあります。
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);
}
ループ内の各ウィジェットを更新します。
しかし今、アプリ ウィジェットを実装する必要がonReceive(Context context, Intent intent)
あります。これは、int[] appWidgetIds が渡されていないため、BroadcastReceiver メソッドで更新されます。したがって、次のようなコードを実装しました。
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);
ウィジェットを 1 つずつ更新するのではなく、実際にはすべてのウィジェットが一度に更新されました。思い通りに動いたのに、なぜ以前のようにすべてのウィジェットを 1 つずつ更新する必要がないのか、私は混乱しました。
2つの方法の違いは何ですか?
から別のブロードキャストBroadcastReceiver.onReceive()
をトリガーに送信できますAppWidgetProvider.onUpdate()
か? そして、どのように?