バックグラウンド更新の頻度を変更して、それらの影響を軽減する場合 最新のバッテリーレベルと充電状態をチェックして、 開始します
アプリケーション アップデートの実行による電池寿命への影響は、電池残量と デバイスの充電状態を確認できます。デバイスを 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_CONNECTED
と ACTION_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
制約)。
多くの場合、デバイスの充電動作はデバイスをホルダーに置くのと同時に行われます。次の 現在のホルダーの状態を確認し、デバイスの変化を監視する ドッキングできます。