3


1

条件に応じてAndroidウィジェットを更新する

Androidの開発を始めたばかりで、バッテリーの状態に関する詳細を表示するアプリケーションを作成しました。 今、私はすべてをウィジェットに入れたいと思っていました-ここに質問があります:ACTION_BATTERY_CHANGEDインテントをリッスンするには、バックグラウンドで更新サービスが本当に必要ですか? 私が最初に考えたのは、AndroidManifest.xmlのウィジェットのintet-filterタグに行を追加することでしたが、明らかにそれほど単純ではありません。 UpdateServiceが正しい方法であれば、私はそうします-しかし、私はちょうど適切なソリューションが何であるかを確認したかったです

3 Answer


4


_ ACTION_BATTERY_CHANGEDインテントをリッスンするには、バックグラウンドで更新サービスが本当に必要ですか? _

マニフェストに登録された「BroadcastReceiver」を「ACTION_BATTERY_CHANGED」に使用することはできません。 `registerReceiver()`を介したアクティビティまたはサービスによってのみ登録できます。

他の理由でメモリにサービスがない場合、より良いアプローチはポーリングです。 AlarmManager`を設定して、バッテリーレベルを頻繁にチェックします(設定してください!)。 バッテリーレベルをチェックするには、 `BroadcastReceiver`なしで ACTION_BATTERY_CHANGED`の IntentFilter`に対して registerReceiver() を呼び出します(最初のパラメーターには null`)。 これにより、最後に放送された「ACTION_BATTERY_CHANGED」「Intent」が返され、そこから最新の充電レベルを取得できます。


2


バッテリーの状態を定期的にポーリングすることをお勧めします。 30分ごと これを行うには、http://developer.android.com/reference/でhttp://developer.android.com/reference/android/appwidget/AppWidgetProviderInfo.html#updatePeriodMillis [updatePeriodMillis]の値を指定するだけです。 android / appwidget / AppWidgetProviderInfo.html [AppWidgetProviderInfo]


.and update your widget by overriding the

http://developer.android.com/reference/android/appwidget/AppWidgetProvider.html#onUpdate [onUpdate]メソッドのhttp://developer.android.com/reference/android/appwidget/AppWidgetProvider.html [` AppWidgetProvider`]。

編集:Martinが指摘したように、30分は実際にこの方法で更新を受信できる最短の間隔です。


1


信じられないかもしれませんが、次のように機能します。

cont.getApplicationContext().registerReceiver(rec, filter);