Обычная экономия заряда батареи

В Android 10 появилась опция настройки расписания режима экономии заряда батареи, называемая « на основе расписания» . Эта опция позволяет приложению, выбранному производителем, отправлять сигналы системе для более интеллектуального планирования режима экономии заряда батареи. Эта опция требует настройки и не является обязательной для реализации.

Конфигурация устройства

Спецификация поставщика

Чтобы уведомить пользовательский интерфейс настроек о том, что устройство настроено правильно, используйте наложение конфигурации, чтобы переопределить значение config_batterySaverScheduleProvider на имя пакета вашего приложения.

Например, если вы хотите, чтобы пакет приложения com.google.android.apps.turbo управлял настройками на основе рутины , то вам следует задать следующее значение конфигурации:

<string name="config_batterySaverScheduleProvider" translatable="false">
com.google.android.apps.turbo</string>

Теперь на телефоне должен появиться параметр «На основе расписания» . Для проверки создайте образ, загрузите его на телефон и перейдите в «Настройки» > «Аккумулятор» > «Экономия заряда» > «Расписание экономии заряда» . Должен появиться параметр « На основе расписания» .

Порог отключения по умолчанию

Новое поле config_dynamicPowerSavingsDefaultDisableThreshold определяет уровень заряда батареи, при котором система отключает режим энергосбережения, если он был включен планировщиком . Значение по умолчанию — 80%, но его можно изменить.

Конфигурация приложения

Разрешения

API, необходимые приложению для включения режима экономии заряда батареи, защищены разрешением android.permission.POWER_SAVER . Это разрешение сигнатуры/привилегированного уровня, поэтому предоставьте приложению, которому вы хотите разрешить активировать режим экономии заряда батареи, это разрешение в вашем privapp-whitelist .

Пример предоставления разрешения privapp приложению:

<privapp-permissions package="com.google.android.apps.turbo">
   <permission name="android.permission.POWER_SAVER"/>
</privapp-permissions>

Если вы заранее не предоставите это разрешение версии приложения в образе системы, приложение не сможет получить его или корректно вызвать API. Система не предоставляет никакой обратной связи, кроме обычных ошибок разрешений, поэтому убедитесь, что вы можете вызывать API, и понаблюдайте за их результатами.

Установка

Для корректной работы приложения , основанного на распорядке , необходимо предварительно установить его в образ системы с необходимым разрешением. Предоставьте разрешение POWER_SAVER только одному приложению и разрешите ему управлять API, основанными на распорядке . Поведение функции при попытке использования разрешения и API несколькими приложениями не поддерживается и не определено.

Экономия заряда батареи

API-интерфейсы

Если настройка прошла успешно, то OEM-приложение, указанное в конфигурации, должно успешно вызвать соответствующий метод в PowerManager для запуска режима экономии заряда батареи:

public boolean setDynamicPowerSaveHint(boolean powerSaveHint, int disableThreshold)

Если включена опция «Расписание на основе режима энергосбережения» и приложение вызывает этот метод со значением true для powerSaveHint , то энергосбережение включается. Укажите disableThreshold , чтобы даже если приложение не может связаться с системой, система всё равно знала, при каком проценте заряда батареи безопасно отключить энергосбережение.

Этот API может быть переопределен пользователем и отложен режим энергосбережения так же, как и автоматический режим энергосбережения на основе процентного значения. Подробнее см. в документации по API .

Чтобы убедиться, что вызовы API выполняются успешно, выполните запрос к глобальным настройкам, чтобы убедиться, что резервные настройки изменили значение в соответствии с вызовами API .

Например, если пользователь выбрал режим обычной экономии заряда батареи и приложение вызывает setDynamicPowerSaveHint(true, 10) , глобальные настройки должны иметь следующие значения:

automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 10
dynamic_power_savings_enabled: 1

Если затем вызвать setDynamicPowerSaveHint(false, 25) , значения должны быть:

automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 25
dynamic_power_savings_enabled: 0

Вы можете проверить эти значения с помощью следующей команды adb :

adb shell settings get global <setting-name>

Проверка

Автоматизированного способа проверки этой функции не существует, поскольку невозможно знать, какое поведение будет использовать OEM-производитель для определения времени включения режима энергосбережения. Таким образом, OEM-производители несут ответственность за тестирование интеграции, чтобы убедиться, что поведение соответствует ожиданиям. В частности, необходимо убедиться, что устройство может выполнять следующие задачи:

  • Пользователь выбирает процент в интерфейсе графика энергосбережения и выбирает 15%. Энергосбережение должно включаться автоматически ТОЛЬКО при достижении уровня заряда батареи 15%.
  • Пользователь выбирает режим энергосбережения на основе расписания в интерфейсе. Когда приложение вызывает API со значением true , энергосбережение включается. Кроме того, энергосбережение автоматически отключается, если устройство заряжено до указанного порогового уровня и отключено от сети.
  • Пользователь не выбирает «Нет» в расписании режима энергосбережения в интерфейсе. Режим энергосбережения НИКОГДА не должен включаться автоматически.
  • Если приложение включает режим экономии заряда батареи, а пользователь вручную отключает его (с помощью быстрых настроек, настроек и т. д.), он должен ОСТАВАТЬСЯ ВЫКЛЮЧЕННЫМ до тех пор, пока пользователь не включит его вручную или не подключит устройство к сети.