Поддержка безбатарейных устройств

На этой странице описывается, как Android работает с устройствами, имеющими как съёмные аккумуляторы, так и устройства без внутренних аккумуляторов. В последнем случае устройства подключаются к внешнему источнику питания, например, к розетке переменного тока или 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 и ниже
Подарок ЛОЖЬ истинный
Статус неизвестный зарядка
Оставшаяся емкость 0 100%
Здоровье неизвестный хороший
Статус зарядного устройства переменного тока в сети не изменено вынужден быть истинным

Производители могут изменять настройки по умолчанию с помощью драйвера питания ядра или Health HAL .

Android 9 и выше

В Android 9 удалена часть старого кода для устройств без батареи, которые по умолчанию делали вид, что батарея присутствует, заряжена на 100% и находится в хорошем состоянии с нормальными показаниями температуры на термисторе.

Большинство API фреймворков, работающих с этой информацией, продолжают обрабатывать распространённые ситуации так же, как и раньше: система считается заряжающейся (то есть не работающей от батареи) и не считается заряженной. Если в пользовательском интерфейсе отображается значок батареи, он отображается с восклицательным знаком, а процент заряда батареи равен 0%. Однако устройство не выключается из-за низкого заряда батареи, и планируются задачи, требующие зарядки или хорошего заряда батареи.

Android 8.1 и ниже

Поскольку состояние батареи неизвестно, API фреймворка Android будет считать, что система заряжается (или не работает от батареи), и не будет считать, что батарея разряжена. Если в пользовательском интерфейсе отображается значок батареи, он отображается с восклицательным знаком, а процент заряда батареи равен 0%. Однако устройство не выключится из-за низкого заряда батареи, и будут запланированы задачи, требующие зарядки или хорошего заряда батареи.

Выполнение

Код по умолчанию Android 9 может работать корректно на вашем устройстве, но рекомендуется внести изменения в ядро ​​или HAL для точного отображения состояния питания и аккумулятора вашего устройства, как описано ранее. Если Android 9 и более поздние версии не обнаруживают зарядное устройство класса Linux Power Supply , то по умолчанию все типы зарядных устройств (AC, USB, беспроводные) будут иметь статус «offline» . Если все зарядные устройства отключены, но аккумулятор не обнаружен, система всё равно будет считаться заряжающейся, то есть работающей от внешнего источника питания, а не от аккумулятора, как описано ранее.

Если ваше устройство не имеет аккумулятора и постоянно подключено к источнику питания, рекомендуется реализовать драйвер зарядного устройства класса power_supply ядра Linux для источника питания переменного тока или USB, который установит его атрибут sysfs «online» в значении « true . Вы также можете настроить свойство «online» для зарядного устройства переменного тока в HAL-уровне Health HAL для вашего устройства. Чтобы настроить свойство «online» для зарядного устройства переменного тока в HAL-уровне Health, см. раздел Health AIDL HAL .

Этот пользовательский Health HAL реализует пользовательскую версию Health::getHealthInfo() , которая изменяет значение BatteryProperties.chargerAcOnline = true .

Для начала скопируйте файл hardware/interfaces/health/aidl/default/Health.cpp в вашу собственную реализацию Health HAL и измените его в соответствии с Health AIDL HAL .