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

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