私はまだ Android に慣れていませんが、次の 3 つの手順でこれを達成しました。
まず、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);
}
}
3 番目に、他のアクティビティから、インテントに設定されたアクションを含む一般的なブロードキャストを送信するだけです。
Intent updateWidgetIntent = new Intent(context, MyWidget.class);
updateWidgetIntent.setAction(MyWidget.MY_PUBLIC_STATIC_STRING);
context.sendBroadcast(updateWidgetIntent);
これには、onUpdate が提供する素敵なインターフェイスの代わりに、コンテキストとアプリ ウィジェット ID から自分で AppWidgetManager を見つけなければならないという欠点があります。したがって、これが正しいアプローチであることに懐疑的です。幸運を祈ります。
myUpdate(Context) は次のように始まります。
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
int[] appWidgetIds =
appWidgetManager.getAppWidgetIds(new ComponentName(context, this.getClass()));