私が知っているように、AppWidgetProvider の onUpdate() メソッドの呼び出しには 2 つのタイプがあります。
- updatePeriodMillis サークルの有効期限が切れたとき
- 新しいウィジェットがホーム画面に追加されたとき
onUpdate() メソッドでは、最初のケースでいくつかのサービスを開始したいのですが、2 番目のケースでは開始しません。onUpdate() がどのように呼び出されたかを判断することは可能ですか?
私が知っているように、AppWidgetProvider の onUpdate() メソッドの呼び出しには 2 つのタイプがあります。
onUpdate() メソッドでは、最初のケースでいくつかのサービスを開始したいのですが、2 番目のケースでは開始しません。onUpdate() がどのように呼び出されたかを判断することは可能ですか?
どちらかの状況を示す更新ブロードキャストで提供された簡単なフラグはないと思います。
ただし、すべてのACTION_APPWIDGET_UPDATE
ブロードキャスト(したがってすべての onUpdate() 呼び出し)には、更新目的で appwidget ID のすべてまたはサブセットが含まれていることに注意してください。これらの ID は、ウィジェットのライフサイクル全体にわたって一定であり、削除されるまでそれぞれが同じ ID を持ちます。
これは、ID を保存して、onUpdate() 呼び出しを受け取るたびに比較できることを意味します。保存されたレコードにない提供された配列の ID で onUpdate() をヒットした場合、これが更新されている新しいウィジェット インスタンスであることを確認できます。それ以外の場合は、1 つ以上の古いものです。
レコードを整理するにonDeleted()
は、プロバイダーにも実装する必要があります。削除された ID を記録から削除します。そうしないと、ユーザーがウィジェットを削除して新しいインスタンスを追加したときに問題が発生する可能性があり、同じ ID を取得する可能性があります。