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