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