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