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

На этой странице описывается, как 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 Framework посчитают, что система заряжается (или не работает от батареи) и не будут считать, что у нее низкий заряд батареи. Если пользовательский интерфейс отображает значок батареи, он будет отображаться с восклицательным знаком, а процент батареи будет отображаться как 0%. Но устройство не выключится из-за низкого заряда батареи, и будут запланированы задания, требующие зарядки или хорошего заряда батареи.

Выполнение

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

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

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

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