私はアンドロイド開発を始めたばかりで、バッテリーの状態に関する詳細を表示するアプリケーションを作成しました。ここで、すべてをウィジェットに入れたいと思いました - そしてここに質問があります: ACTION_BATTERY_CHANGED インテントをリッスンするために、バックグラウンドで更新サービスが本当に必要ですか? 私が最初に考えたのは、AndroidManifest.xml 内のウィジェットの intet-filter タグに 1 行だけ挿入することでしたが、明らかにそれほど単純ではありません。UpdateService が正しい方法である場合はそうしますが、適切な解決策が何であるかを確認したかっただけです
3 に答える
ACTION_BATTERY_CHANGED インテントをリッスンするために、バックグラウンドで更新サービスが本当に必要ですか?
BroadcastReceiver
に登録されたマニフェストは使用できませんACTION_BATTERY_CHANGED
。を介してアクティビティまたはサービスによってのみ登録できますregisterReceiver()
。
他の理由でメモリ内にサービスがない場合は、より良い方法はポーリングです。バッテリー残量を定期的にチェックするように設定しAlarmManager
ます (設定可能です!)。バッテリ レベルを確認するには、最初のパラメータに( )registerReceiver()
を付けACTION_BATTERY_CHANGED
IntentFilter
ずに を呼び出します。これにより、最新の充電レベルを取得できるlast-broadcast が返されます。BroadcastReceiver
null
ACTION_BATTERY_CHANGED
Intent
バッテリーの状態を定期的に、たとえば 30 分ごとにポーリングすることをお勧めします。これを行うには、単に値を指定するだけupdatePeriodMillis
ですAppWidgetProviderInfo
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:updatePeriodMillis="1800000" />
onUpdate
.. のメソッドをオーバーライドして、ウィジェットを更新しますAppWidgetProvider
。
編集: Martin が指摘したように、実際には 30 分がこの方法で更新を受信できる最短の間隔です。
信じられないかもしれませんが、次のように機能します。
cont.getApplicationContext().registerReceiver(rec, filter);