常规省电模式

Android 10 引入了一个称为基于常规的省电模式调度选项。借助此选项,原始设备制造商 (OEM) 选择的应用可以向系统提供信号,以实现更智能的省电模式调度。 此选项需要配置,在实现上是可选的。

设备配置

提供程序规范

如需告知设置界面设备配置正确,请使用配置叠加层将值 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_SAVERandroid.permission.这是一项签名/特许权限,因此请在 privapp-whitelist 中授予您希望其触发省电模式的应用。

向应用授予 privappprivapp 权限的示例:

<privapp-permissions package="com.google.android.apps.turbo">
   <permission name="android.permission.POWER_SAVER"/>
</privapp-permissions>

如果您未将此权限预先授予系统映像上的应用版本,则该应用无法获取权限或正确调用 API。系统不提供常规权限错误之外的任何反馈,因此请验证您是否可以调用 API 并观察其效果。

安装

如需使基于常规正常工作,您必须使用必需的权限将应用预安装到系统映像上。仅向一个应用授予 POWER_SAVER 权限,并允许该应用控制基于常规 API。当多个应用尝试使用权限和 API 时,该功能不受支持且未指定。

触发省电模式

API

假设到目前为止设置成功,配置中指定的 OEM 应用应该能够成功调用 PowerManager 中的关联方法,从而触发省电模式:

public boolean setDynamicPowerSaveHint(boolean powerSaveHint, int disableThreshold)

如果启用了基于常规省电模式调度选项,且应用对 powerSaveHint 使用 true 值并调用此方法,则省电模式开启。指定 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

您可以使用下面的 adbadb 命令检查这些值:

adb shell settings get global <setting-name>

验证

没有自动验证此功能的方法,因为我们没法知道 OEM 将使用什么行为来决定何时触发常规省电模式。因此,原始设备制造商 (OEM) 负责测试其集成,以确保行为符合预期,尤其是验证设备是否可以完成以下任务:

  • 用户在省电模式调度界面中依次选择根据电量百分比和 15%。只有当电量降到 15% 时,省电模式才会自动开启。
  • 用户在省电模式调度界面中选择基于常规。当应用使用 true 调用 API 时,省电模式开启。此外,如果设备充电至指定的电量阈值并断开电源,省电模式将自动关闭。
  • 用户在省电模式调度界面中选择。省电模式永远不会自动开启。
  • 如果应用开启省电模式,然后用户手动进行替换,将省电模式设置为重新关闭(使用“快速设置”、“设置”等),则该模式应保持关闭状态,直到用户再次手动重新开启或将设备插入电源。