iOS電池電量與低電量模式
優步最近公布的數據顯示, 當電池快沒電的時候,人們更愿意接受溢價 。同時,優步也表明他們并沒有利用電量相關的數據來設置溢價規則。換句話說,我們在開發App的時候,可以通過電池電量來"提升用戶體驗"。
電池狀態與電量
UIDevice 中有三個電池相關的屬性:
@property(nonatomic,getter=isBatteryMonitoringEnabled) BOOL batteryMonitoringEnabled NS_AVAILABLE_IOS(3_0) __TVOS_PROHIBITED; // default is NO
@property(nonatomic,readonly) UIDeviceBatteryState batteryState NS_AVAILABLE_IOS(3_0) __TVOS_PROHIBITED; // UIDeviceBatteryStateUnknown if monitoring disabled
@property(nonatomic,readonly) float batteryLevel NS_AVAILABLE_IOS(3_0) __TVOS_PROHIBITED; // 0 .. 1.0. -1.0 if UIDeviceBatteryStateUnknown
我們可以通過 batteryState 來獲取電池狀態,通過 batteryLevel 來獲取電池電量信息。
值得一提的是,在獲取電池信息之前,需要手動設置 batteryMonitoringEnabled 為 YES ,不然 batterystate 會返回 Unkonw .
如果想要訂閱電池狀態,可以注冊為以下兩個通知的觀察者:
UIKIT_EXTERN NSString *const UIDeviceBatteryStateDidChangeNotification;
UIKIT_EXTERN NSString *const UIDeviceBatteryLevelDidChangeNotification;
batteryLevel 的值每改變 0.05(也就是電池電量的 5% ), 就會觸發一次 UIDeviceBatteryLevelDidChangeNotification 。
低電量模式
為了解決續航問題,Apple 在 iOS 9 中為 iPhone 添加了 低電量模式 。在此模式下,系統會通過禁用一些特性諸如電子郵件自動獲取、后臺刷新、Hey Siri等,來達到降低能耗的目的。
低電量模式的設置藏得比較深,以至于從設置中找到它對大多數人來說是一件非常困難的事。換句話說,用戶打開了低電量模式,才能真正說明用戶所處的情景需要盡可能地節約電量。因此,相比較于直接獲取電池電量來說,探測低電量模式是否開啟,更能直觀地反應產品情景和用戶心理。
檢測低電量模式
在 iOS 9 中,我們可以很容易地檢測到用戶是否開啟了低電量模式, NSProcessInfo 提供了相對于的屬性。
if ([[NSProcessInfo processInfo] isLowPowerModeEnabled])
{
// 做低電量模式下該做的事
}
同時,如果想要對低電量模式的變化做出響應,可以注冊為以下通知的觀察者:
NSString * const NSProcessInfoPowerStateDidChangeNotification;
當我們檢測低電量模式的時候,需要注意以下兩點:
- 低電量模式僅支持 iOS 9 。當 App 需要兼容更早的版本時,先檢查api的可用性。
- 低電量模式僅適用于 iPhone ,在 iPad 中, isLowPowerModeEnabled 的返回值始終為 NO
當我們檢測到用戶開啟了低電量模式,可以為用戶做一些小改變,來幫助用戶延長電池續航。以下是 Apple 給出一些建議:
- 停止使用定位服務
- 減弱動畫效果
- 停止后臺任務(比如網絡請求)
- 禁用運動追蹤
參考資料
- Energy Efficiency Guide for iOS Apps
- WWDC 2015 Session 707 Achieving All-day Battery Life
- Detecting low power mode
來自: http://shengpan.net/battery/