電池残量と充電状態を監視する

バックグラウンド更新の頻度を変更して、それらの影響を軽減する場合 最新のバッテリーレベルと充電状態をチェックして、 開始します

アプリケーション アップデートの実行による電池寿命への影響は、電池残量と デバイスの充電状態を確認できます。デバイスを AC で充電しているときにアップデートを実行した場合の影響 リフレッシュ レートはごくわずかなので、ほとんどの場合、デバイスが接続されているときはリフレッシュ レートを最大にすることができます。 コンセントに接続してください。逆に、バッテリーが放電しているときは、アップデート レートを下げると、 バッテリー寿命を延ばします。

同様に、バッテリーの充電レベルもチェックできるので、バッテリーの充電頻度や バッテリーの残量が残りわずかになると、更新が行われます。

現在の充電状態を特定する

初めに現在の充電状態を特定します。BatteryManager すべてのバッテリーと充電の詳細を、以下を含むスティッキー Intent でブロードキャストします。 充電ステータス。

これはスティッキー インテントであるため、BroadcastReceiver を登録する必要はありません。registerReceiver を呼び出すだけで、 次のスニペットに示すように、レシーバーが null の場合、現在のバッテリー ステータス インテントは次のようになります。 返されます。ここでは実際の BroadcastReceiver オブジェクトを渡すこともできますが、 更新は後のセクションで扱うため、必須ではありません。

Kotlin

val batteryStatus: Intent? = IntentFilter(Intent.ACTION_BATTERY_CHANGED).let { ifilter ->
    context.registerReceiver(null, ifilter)
}

Java

IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);

現在の充電ステータスと、デバイスが充電中の場合は、 USB または AC 充電器で充電している場合:

Kotlin

val status: Int = batteryStatus?.getIntExtra(BatteryManager.EXTRA_STATUS, -1) ?: -1
val isCharging: Boolean = status == BatteryManager.BATTERY_STATUS_CHARGING
        || status == BatteryManager.BATTERY_STATUS_FULL

// How are we charging?
val chargePlug: Int = batteryStatus?.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) ?: -1
val usbCharge: Boolean = chargePlug == BatteryManager.BATTERY_PLUGGED_USB
val acCharge: Boolean = chargePlug == BatteryManager.BATTERY_PLUGGED_AC

Java

// Are we charging / charged?
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                     status == BatteryManager.BATTERY_STATUS_FULL;

// How are we charging?
int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;

通常は、デバイスが正常に動作しない場合、バックグラウンド更新のレートを AC 充電器に接続されている場合、USB 経由の充電の場合は速度を下げ、充電速度を下げます。 バッテリーが放電していると、さらに残ってしまいます。

充電状態の変化を監視する

充電ステータスはデバイスを電源に接続すると簡単に変わることがあるため、 充電状態の変化をモニタリングして、それに応じてリフレッシュ レートを変更します。

BatteryManager は、デバイスが接続または接続されるたびにアクションをブロードキャストします。 電源から外されました。アプリがインストールされていない場合でも、これらのイベントを受信することが 特に、これらのイベントはアプリの起動頻度に影響するため、 そのため、マニフェストに BroadcastReceiver を登録して、両方のイベントをリッスンする必要があります。そのためには、 インテント フィルタ内の ACTION_POWER_CONNECTEDACTION_POWER_DISCONNECTED

<receiver android:name=".PowerConnectionReceiver">
  <intent-filter>
    <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
    <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
  </intent-filter>
</receiver>

現在の電池残量を特定する

現在のバッテリー レベルを特定すると役に立つ場合もあります。トラフィック量を減らすことで バッテリーの残量が一定のレベルを下回ると、バックグラウンドが更新されます。

現在のバッテリー残量を確認するには、現在のバッテリー残量とスケールを 次のようにバッテリー ステータス インテントを実行します。

Kotlin

val batteryPct: Float? = batteryStatus?.let { intent ->
    val level: Int = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)
    val scale: Int = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1)
    level * 100 / scale.toFloat()
}

Java

int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);

float batteryPct = level * 100 / (float)scale;

バッテリー残量の大幅な変化に対応する

バッテリーの状態を継続的に監視することは簡単ではなく、また監視する必要もありません。

一般的に、バッテリー残量のモニタリングによる影響は アプリの通常動作よりもバッテリーに悪影響を及ぼす可能性があります。たとえば、 バッテリー残量が少ないときに保留中の作業をキャンセルするマニフェスト内の BroadcastReceiver 主にバッテリーの消耗を早めるため( Android 8.0)。代わりに、いつ実行するかを記述した処理に対する制約を指定できます。 アプリの起動に電力を費やすことなくシステムが決定を下せるようになります。

一般的に、バッテリーの残量が 0 のときはバックグラウンド アップデートを実行しないことをおすすめします。 非常に低くなります。スマートフォンの電源がオフになる前に自動的に電源がオフになっていれば、データの更新頻度は関係ありません 活用できるようにします。そのためには、 WorkManager ライブラリを使用するBatteryNotLow の制約 (通常の関連イベントに加えて)バッテリー残量が少ない場合には、処理を実行しないよう指定します。 NetworkType 制約)。

多くの場合、デバイスの充電動作はデバイスをホルダーに置くのと同時に行われます。次の 現在のホルダーの状態を確認し、デバイスの変化を監視する ドッキングできます。