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_SAVER
android.permission.这是一项签名/特许权限,因此请在 privapp-whitelist
中授予您希望其触发省电模式的应用。
向应用授予 privapp
privapp 权限的示例:
<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
您可以使用下面的 adb
adb 命令检查这些值:
adb shell settings get global <setting-name>
验证
没有自动验证此功能的方法,因为我们没法知道 OEM 将使用什么行为来决定何时触发常规省电模式。因此,原始设备制造商 (OEM) 负责测试其集成,以确保行为符合预期,尤其是验证设备是否可以完成以下任务:
- 用户在省电模式调度界面中依次选择根据电量百分比和 15%。只有当电量降到 15% 时,省电模式才会自动开启。
- 用户在省电模式调度界面中选择基于常规。当应用使用
true
调用 API 时,省电模式开启。此外,如果设备充电至指定的电量阈值并断开电源,省电模式将自动关闭。 - 用户在省电模式调度界面中选择无。省电模式永远不会自动开启。
- 如果应用开启省电模式,然后用户手动进行替换,将省电模式设置为重新关闭(使用“快速设置”、“设置”等),则该模式应保持关闭状态,直到用户再次手动重新开启或将设备插入电源。