Режим энергосбережения

В 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/ на том же разделе, что и приложение. Например, чтобы предоставить приложению с названием пакета com.google.android.apps.turbo разрешение android.permission.POWER_SAVER, выполните следующие действия:

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