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