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

На этой странице описывается, как Android обрабатывает продукты со съемными батареями или без встроенных батарей. Последние устройства вместо этого подключаются к внешнему источнику питания, например к розетке переменного тока или порту USB на другом устройстве.

Батарея присутствует?

Следующий код может использоваться приложениями для определения того, есть ли в устройстве батарея в данный момент:

```
final Intent batteryInfo = registerReceiver(null, new
IntentFilter(Intent.ACTION_BATTERY_CHANGED));

return batteryInfo.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true);
```

Поведение безбатарейного устройства

Если Android не обнаруживает устройство с аккумулятором для вашего продукта, используются следующие значения по умолчанию, связанные с аккумулятором. Обратите внимание, что значения по умолчанию изменились в выпуске Android 9. В этой таблице показаны различия.

Состояние батареи Андроид 9 и выше Android 8.1 и ниже
Настоящее время ложный истинный
Положение дел неизвестный зарядка
Оставшаяся емкость 0 100%
Здоровье неизвестный хорошо
Онлайн-статус зарядного устройства переменного тока не изменен вынужденный к истине

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

Андроид 9 и выше

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

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

Android 8.1 и ниже

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

Реализация

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

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

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

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