Обычная экономия заряда батареи

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