В 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 и наблюдать за их эффектами.
Установка
Для корректной работы функции «На основе процедуры» необходимо предварительно установить приложение на образ системы с необходимыми разрешениями. Предоставьте разрешение android.permission.POWER_SAVER только одному приложению и позвольте ему управлять API функции «На основе процедуры» . Если несколько приложений попытаются использовать это разрешение и 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. Кроме того, режим экономии заряда батареи автоматически выключится, если устройство зарядится до указанного порогового уровня и будет отключено от сети. - Нет: Если вы выберете «Нет» в пользовательском интерфейсе расписания режима экономии заряда батареи , режим экономии заряда батареи никогда не будет включаться автоматически.
- Ручное отключение: Если приложение включает режим экономии заряда батареи, и вы вручную отключаете его (используя быстрые настройки , настройки или другие способы), он остается выключенным до тех пор, пока вы либо не включите его снова вручную, либо не подключите устройство к сети.