このページでは、取り外し可能な電池を使用する製品または内蔵電池がない製品に Android がどのように対応するかについて説明します。内蔵電池がないデバイスは、AC 電源コンセントや別のデバイスの USB ポートなどの外部電源に接続されます。
電池の有無
アプリケーションで次のコードを使用すると、デバイスに電池が存在するかどうかを検出できます。
```
final Intent batteryInfo = registerReceiver(null, new
IntentFilter(Intent.ACTION_BATTERY_CHANGED));
return batteryInfo.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true);
```
電池非搭載デバイスの動作
Android が製品の電池デバイスを検出しなかった場合、電池に関する次のデフォルト値が使用されます。Android 9 リリースではデフォルトが変更されていることにご注意ください。変更点を次の表に示します。
電池の状態 | Android 9 以上 | Android 8.1 以下 |
---|---|---|
存在するか | false | true |
ステータス | 不明 | 充電中 |
残量 | 0 | 100% |
健全性 | 不明 | 良好 |
AC 充電器のオンライン ステータス | 変更なし | 強制的に true |
メーカーは、カーネルの power_supply ドライバまたは Health HAL を使用してデフォルト設定を変更できます。
Android 9 以上
Android 9 では、電池非搭載デバイス用のいくつかの古いコードが削除されました。それらのコードは、デフォルトでは、電池が存在し、100% 充電されており、健全性は良好でサーミスタで読み取られた温度が正常であると見なしていました。
この情報を取り扱うほとんどの Android フレームワーク API は、引き続き以前と同様に一般的な状況を処理します。システムは充電中(つまり、電池の電力で作動していない)と見なされ、電池残量が少ないとは見なされません。ユーザー インターフェースで電池アイコンが描画される場合は、感嘆符付きで表示され、電池残量のパーセンテージは 0% と表示されます。ただし、電池残量の少なさが原因でデバイスがシャットダウンすることはなく、充電または良好な電池を必要とするジョブがスケジュールされます。
Android 8.1 以下
電池のステータスが不明であるため、Android フレームワーク API はシステムが充電中である(つまり、電池の電力で作動していない)と見なし、電池残量が少ないとは見なしません。ユーザー インターフェースで電池アイコンがレンダリングされる場合は、感嘆符付きで表示され、電池残量のパーセンテージは 0% と表示されます。ただし、電池残量の少なさが原因でデバイスがシャットダウンすることはなく、充電または良好な電池を必要とするジョブがスケジュールされます。
実装
Android 9 のデフォルトのコードはお使いのデバイスで正しく動作する可能性がありますが、お使いの製品で上記のような電源と電池の状態を正確に反映するには、カーネルまたは HAL を変更することをおすすめします。Android 9 以上で Linux 電力供給クラスの充電デバイスが検出されない場合、デフォルトではすべての充電器タイプ(AC、USB、ワイヤレス)のステータスが「オフライン」になります。すべての充電器がオフラインであるにもかかわらず電池デバイスが検出されない場合、前述のように電池ではなく外部電源の電力で作動しているという意味において、システムは充電中であると見なされます。
製品に電池が搭載されておらず、常に電源に接続されている場合は、Linux カーネルの power_supply クラスの charger ドライバを実装することをおすすめします。このドライバは AC 電源または USB 電源用で、オンラインの sysfs
属性を true
に設定します。または、デバイスの Health HAL で AC 充電器のオンライン プロパティを設定することもできます。設定するには、Health 2.0 の実装の説明に沿って Health HAL を実装します。
このカスタム Health HAL は、Health::getHealthInfo()
の値を変更する BatteryProperties.chargerAcOnline = true
のカスタム バージョンを実装します。
開始するには、お持ちの Health HAL 実装にファイル hardware/interfaces/health/2.0/default/Health.cpp
をコピーし、Health 2.0 の READMEに沿ってファイルを変更します。