Android 10 引入了一個名為基於常規的節電計劃選項。此選項允許 OEM 選擇的應用程序向系統提供信號,以實現更智能的節電計劃。此選項需要配置,並且是可選的實現。
設備配置
提供者規範
要通知設置 UI 設備已正確配置,請使用您的配置覆蓋以使用您的應用程序的包名稱覆蓋值config_batterySaverScheduleProvider
。
例如,如果您希望應用程序包com.google.android.apps.turbo
控制基於例程設置,那麼您將設置此配置值:
<string name="config_batterySaverScheduleProvider" translatable="false">
com.google.android.apps.turbo</string>
現在手機應該顯示基於常規選項。要進行驗證,請構建您的映像,將其刷入手機,然後導航至Settings > Battery > Battery Saver > Battery Saver Schedule 。應出現基於常規選項。
默認關閉閾值
新的config_dynamicPowerSavingsDefaultDisableThreshold
字段指定係統關閉電池保護程序的電池電量,如果它是由基於例程調度程序打開的。系統默認為 80%,但您可以更改它。
應用配置
權限
應用從應用打開省電模式所需的 API 受權限android.permission.POWER_SAVER
保護。這是一個簽名/特權權限,因此請在您的privapp-whitelist
中授予您希望能夠觸發省電模式的應用程序此權限。
授予應用程序privapp
權限的示例:
<privapp-permissions package="com.google.android.apps.turbo">
<permission name="android.permission.POWER_SAVER"/>
</privapp-permissions>
如果您沒有在系統鏡像上為應用的版本預授權該權限,應用將無法獲取該權限,也無法正常調用API。除了通常的權限錯誤,系統不會提供任何反饋,因此請確認您可以調用 API 並觀察其效果。
安裝
為了使基於例程的正常工作,您必須在具有所需權限的系統映像上預先安裝該應用程序。只給一個應用程序POWER_SAVER
權限,並允許它控制基於例程的 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 shell settings get global <setting-name>
確認
沒有自動方法來驗證此功能,因為無法知道 OEM 將使用什麼行為來決定何時觸發常規節電模式。因此,OEM 負責測試他們的集成,以確保行為符合預期。特別是,驗證設備是否可以完成以下任務:
- 用戶在省電計劃 UI 中根據百分比進行選擇,並選擇 15%。只有當電池電量達到 15% 時,節電程序才會自動啟動。
- 用戶根據節電計劃 UI 中的例程進行選擇。當應用使用
true
調用 API 時,省電模式會打開。此外,如果設備充電到指示的閾值水平並拔下電源,電池保護程序會自動關閉。 - 用戶在省電計劃 UI 中選擇無。電池保護程序永遠不會自動啟動。
- 如果應用打開省電模式並且用戶手動覆蓋省電模式以再次關閉(使用快速設置、設置等),則它應該保持關閉狀態,直到用戶再次手動將其重新打開或插入設備。