ウィジェットを作成するには、2つのオプションがあります。最初のオプションは構成アクティビティを使用せず、次にすべてのウィジェットが同様に動作し、区別せずにすべてを一度に更新できます。2つ目は、構成アクティビティを使用することです。ここで、呼び出された構成アクティビティから作成されたウィジェットIDを次の方法で取得できます。
Intent intent = getIntent();
Bundle extras = intent.getExtras();
int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
このウィジェットIDは、たとえば、構成手順中に定義されたこのウィジェットに関する他の情報を使用して、sqliteに永続化できます。
だからあなたの質問のために:
この動作は意図的なものですか?
答えは「はい」だと思います。構成手順なしで作成されたウィジェットは同様に動作する必要があり、の属性でonUpdate
定義された間隔で呼び出されるためです。updatePeriodMillis
AppWidgetProviderInfo
onUpdateを適切なIDでのみ呼び出すように強制する方法はありますか?
いいえ。ドキュメントから、そのようなオプションは存在しないことがわかります。
影響を受けるインスタンスを他のインスタンスと区別する方法はありますか?
はい、いつ、どの正確なウィジェットを更新するかを決めることができます。onRecieve
これは、ウィジェットプロバイダークラスで使用することで実現できます。
- 構成アクティビティを使用して、各ウィジェットIDを永続化します。または、ウィジェットのonClickイベントに保留中のインテントを設定し、このインテント内のウィジェットIDをアクティビティに渡してから永続化します。アイデア-ウィジェットIDを保存して、後でそれらを区別できるようにします。
- アプリケーション(アクティビティ、サービス、アラームマネージャーなど)から、更新するウィジェットIDを使用してブロードキャストを送信します。
onRecieve
ブロードキャストをキャッチし、ウィジェットIDをフェッチしてから、ウィジェットプロバイダークラスで具象ウィジェットを操作できます。