This page describes how Android handles products that have either removable batteries or no internal batteries. The latter devices are instead connected to an external power source, such as an AC power outlet or USB port on another device.
Is a battery present?
The following code may be used by applications to detect whether the device has a battery currently present:
final Intent batteryInfo = registerReceiver(null, new
return batteryInfo.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true);
Batteryless device behavior
If Android does not detect a battery device for your product, then the following battery-related default values are used. Note the defaults have changed in the Android 9 release. This table shows the differences.
|Android 9 and higher
|Android 8.1 and lower
|AC charger online status
|forced to true
Android 9 and higher
Android 9 removes some previous code for batteryless devices that by default pretended a battery was present, was being charged at 100%, and was in good health with a normal temperature reading on its thermistor.
Most framework APIs that deal with this information continue to handle common situations the same as previously: the system will be considered to be charging (that is, not running on battery power), and will not be considered to have a low battery. If the user interface draws the battery icon, it will appear with an exclamation point, and battery percentage will be shown as 0%. But the device will not shut down due to low battery, and jobs that require charging or good battery will be scheduled.
Android 8.1 and lower
Because the battery status is unknown, the Android framework APIs will consider the system to be charging (or, not running on battery power) and will not be considered to have a low battery. If the user interface renders the battery icon, it will appear with an exclamation point, and battery percentage will be shown as 0%. But the device will not shut down due to low battery, and jobs that require charging or good battery will be scheduled.
The Android 9 default code may work properly for your device, but it is recommended to make either a kernel or a HAL change to accurately reflect the power and battery state for your product, as described above. If Android 9 and higher does not detect a Linux power supply class charger device, then by default all charger types (AC, USB, Wireless) will have status offline. If all chargers are offline but there is no battery device detected, the system will still be considered to be charging in the sense that it is running on external, not battery power, as described previously.
If your product does not have a battery and is always connected to a power
source, it's best to implement a Linux kernel power_supply class charger
driver for the AC or USB power source that sets its online
true. Or you can configure the AC charger online property in a Health HAL
for your device. To do this implement a Health HAL as described in Implementing
This custom Health HAL implements a custom version of
that modifies the value of
BatteryProperties.chargerAcOnline = true.