В 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 . Это разрешение, основанное на подписи или привилегированном доступе. Это означает, что приложение должно находиться в каталоге priv-app на образе системы, и вы должны явно предоставить это разрешение.
Для привилегированных приложений необходимо предоставить разрешения в XML-файле конфигурации системы в каталоге /etc/permissions/ в том же разделе, что и приложение. Например, чтобы предоставить разрешение android.permission.POWER_SAVER приложению с именем пакета com.google.android.apps.turbo :
<!-- File located at /etc/permissions/privapp-permissions-DEVICE_NAME.xml -->
<permissions>
<privapp-permissions package="com.google.android.apps.turbo">
<permission name="android.permission.POWER_SAVER"/>
</privapp-permissions>
</permissions>
Если вы не предоставите это разрешение приложению заранее в образе системы, оно не сможет получить его или успешно вызвать API. Система не предоставляет никакой обратной связи, кроме стандартных ошибок разрешений, поэтому крайне важно убедиться, что приложение может вызывать API, и наблюдать за их результатами.
Установка
Для корректной работы функции Based on routine необходимо предварительно установить приложение в образе системы с необходимым разрешением. Предоставьте разрешение android.permission.POWER_SAVER только одному приложению и позвольте ему управлять API Based on routine . Поведение функции не поддерживается и не определено, если несколько приложений пытаются использовать это разрешение и 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>
Проверка
Автоматизированного способа проверки этой функции не существует, поскольку производитель оборудования определяет поведение, которое активируется в зависимости от режима энергосбережения. Производители оборудования должны протестировать интеграцию, чтобы убедиться, что поведение соответствует ожиданиям. В частности, необходимо убедиться, что устройство может выполнять следующие задачи:
- На основе процентов: если в интерфейсе графика экономии заряда батареи выбран параметр «На основе процентов» и выбрано значение 15%, функция экономии заряда батареи автоматически включится только при достижении уровня заряда батареи 15%.
- На основе расписания: если в пользовательском интерфейсе расписания энергосбережения выбран параметр «На основе расписания» , энергосбережение включается при вызове API приложением значения
true. Кроме того, энергосбережение автоматически отключается, если устройство заряжается до указанного порогового уровня и отключено от сети. - Нет: если в пользовательском интерфейсе расписания функции экономии заряда батареи выбрано значение «Нет» , функция экономии заряда батареи никогда не включится автоматически.
- Ручное переключение: если приложение включает функцию экономии заряда батареи и вы вручную отключаете ее (с помощью быстрых настроек , настроек или другими способами), она остается выключенной до тех пор, пока вы не включите ее вручную или не подключите устройство.