- 原文連結 : Detecting low power mode
- 原文作者 : useyourloaf
- 譯文出自 : 掘金翻譯計劃
- 譯者 : Zheaoli
- 校對者 : LoneyIsError, wild-flame
這個星期,我閱讀了一篇關於 Uber 怎樣檢測手機處於省電模式的文章。(註:文章連結是Uber found people more likely to pay) 在人們手機快要關機時,使用 Uber 可能會面臨更高的價格。 這家公司(註:指 Uber)宣稱他們不會利用手機是否處於節能模式這一數據來進行定價, 但是這裡我想知道 我們怎麼知道用戶的 iPhone 處於低電量模式
低電量模式#
在 iOS 9 中,蘋果為 iPhone 手機新添加了 低電量模式 功能。在你能充電之前,低電量模式通過關閉諸如郵件收發,Siri,後臺消息推送能耗電功能來延長你的電池使用時間。
在這裡面,很重要的一點是,是否進入低電量模式是由用戶自行決定的。 你需要進入電池設置中去開啟低電量模式。當你進入低電量模式的時候,狀態欄上的電池圖標會變成黃色。
當你充電至 80% 以上時,系統會自動關閉低電量模式。
低電量模式檢測#
事實證明,在 iOS 9 中獲取低電量模式信息是很容易的一件事。 你可以通過NSProcessInfo這個類來判斷用戶是否進入了低電量模式:
if NSProcessInfo.processInfo().lowPowerModeEnabled {
// stop battery intensive actions
}
如果你想用 Objective-C 來實現這個功能:
if ([[NSProcessInfo processInfo] isLowPowerModeEnabled]) {
// stop battery intensive actions
}
如果你監聽了NSProcessInfoPowerStateDidChangeNotification通知,在用戶切換進入低電量模式的時候你將接收到一個消息。比如,在視圖控制器中的viewDidLoad方法中:
NSNotificationCenter.defaultCenter().addObserver(self,
selector: #selector(didChangePowerMode(_:)),
name: NSProcessInfoPowerStateDidChangeNotification,
object: nil)
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didChangePowerMode:)
name:NSProcessInfoPowerStateDidChangeNotification
object:nil];
在我第一次發布這篇文章後,很多人提醒我:對於只對 iOS 9.X 適配的開發者而言,沒有必要在 ViewController 消失時去移除 Observer 。
接著在這個方法會監視電池模式並在切換的時候給予一個響應。
func didChangePowerMode(notification: NSNotification) {
if NSProcessInfo.processInfo().lowPowerModeEnabled {
// low power mode on
} else {
// low power mode off
}
}
- (void)didChangePowerMode:(NSNotification *)notification {
if ([[NSProcessInfo processInfo] isLowPowerModeEnabled]) {
// low power mode on
} else {
// low power mode off
}
}
小貼士:
-
這個通知方法和 NSProcessInfo 裡的屬性是在 iOS 9 系統中新提供的方法。如果你想讓你的 APP 兼容 iOS8 或者更早版本的系統,你需要去這個網站 test for availability測試你的代碼是否能正常運行。
-
低電量模式是 iPhone 獨有的特性,如果你在 iPad 上測試前面的代碼,會一直返回 false。
只有在你的 App 能夠採取一些節能措施來延長電池壽命的情況下,檢測用戶開啟了低電量模式才是有用的。這裡,蘋果給了一些建議:
- 停止更新位置
- 減少用戶交互動畫
- 關閉數據流量這樣的後臺操作
- 關閉特效