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

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

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

Спецификация провайдера

Чтобы уведомить пользовательский интерфейс настроек о том, что устройство настроено правильно, используйте оверлей конфигурации, чтобы переопределить значение 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 , включается режим энергосбережения. Кроме того, функция энергосбережения автоматически отключается, если устройство заряжено до указанного порогового уровня и отключено от сети.
  • Пользователь не выбирает ничего в пользовательском интерфейсе расписания экономии заряда батареи. Экономия заряда батареи НИКОГДА не должна включаться автоматически.
  • Если приложение включает режим энергосбережения, а пользователь вручную отключает режим энергосбережения (используя быстрые настройки, настройки и т. д.), оно должно ОСТАВАТЬСЯ ВЫКЛЮЧЕННЫМ до тех пор, пока пользователь не включит его снова вручную или не подключит устройство.