На этой странице описывается, как 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 и более ранние версии |
|---|---|---|
| Показ на главном экране | false | true |
| Статус | неизвестно | зарядка |
| Оставшееся количество показов | 0 | 100% |
| Здоровье | неизвестно | хорошо |
| Статус подключения зарядного устройства переменного тока | не изменен | принудительно установлено значение true |
Производители могут изменить настройки по умолчанию с помощью драйвера ядра power_supply или Health HAL.
Android 9 и более поздних версий
В Android 9 удален код, который использовался в предыдущих версиях для устройств без батареи. По умолчанию он имитировал наличие батареи, ее зарядку на 100%, хорошее состояние и нормальную температуру, определяемую терморезистором.
Большинство API фреймворка, работающих с этой информацией, по-прежнему обрабатывают распространенные ситуации так же, как и раньше: система считается заряжающейся (то есть не работающей от батареи) и не считается разряженной. Если в пользовательском интерфейсе есть значок батареи, на нем появится восклицательный знак, а уровень заряда будет показан как 0%. Но устройство не выключится из-за низкого заряда батареи, а задачи, требующие зарядки или хорошего заряда батареи, будут запланированы.
Android 8.1 и более ранние версии
Поскольку статус батареи неизвестен, API фреймворка Android будут считать, что система заряжается (или не работает от батареи), и не будут считать, что батарея разряжена. Если в пользовательском интерфейсе отображается значок батареи, он будет показан с восклицательным знаком, а уровень заряда батареи будет указан как 0%. Однако устройство не выключится из-за низкого заряда батареи, и задачи, для которых требуется зарядка или высокий уровень заряда батареи, будут запланированы.
Реализация
Код по умолчанию в Android 9 может работать правильно на вашем устройстве, но рекомендуется внести изменения в ядро или HAL, чтобы точно отражать состояние питания и батареи для вашего продукта, как описано ранее. Если Android 9 и более поздние версии не обнаруживают зарядное устройство класса источника питания Linux, то по умолчанию все типы зарядных устройств (AC, USB, беспроводные) будут иметь статус offline. Если все зарядные устройства отключены, но устройство с батареей не обнаружено, система все равно будет считаться заряжающейся, поскольку она работает от внешнего источника питания, а не от батареи, как описано выше.
Если у вашего устройства нет батареи и оно всегда подключено к источнику питания, лучше всего реализовать драйвер зарядного устройства класса power_supply ядра Linux для источника питания переменного тока или USB, который устанавливает атрибут online sysfs в значение true. Или вы можете настроить онлайн-свойство зарядного устройства переменного тока в Health HAL
для своего устройства. Чтобы настроить свойство AC charger 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.