優步最近公布的數據顯示,當電池快沒電的時候,人們更願意接受溢價。同時,優步也表明他們並沒有利用電量相關的數據來設置溢價規則。換句話說,我們在開發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