Manjusaka

Manjusaka

如何檢測iPhone處於低電量模式

這個星期,我閱讀了一篇關於 Uber 怎樣檢測手機處於省電模式的文章。(註:文章連結是Uber found people more likely to pay) 在人們手機快要關機時,使用 Uber 可能會面臨更高的價格。 這家公司(註:指 Uber)宣稱他們不會利用手機是否處於節能模式這一數據來進行定價, 但是這裡我想知道 我們怎麼知道用戶的 iPhone 處於低電量模式

低電量模式#

在 iOS 9 中,蘋果為 iPhone 手機新添加了 低電量模式 功能。在你能充電之前,低電量模式通過關閉諸如郵件收發,Siri,後臺消息推送能耗電功能來延長你的電池使用時間。

在這裡面,很重要的一點是,是否進入低電量模式是由用戶自行決定的。 你需要進入電池設置中去開啟低電量模式。當你進入低電量模式的時候,狀態欄上的電池圖標會變成黃色。

Low Power Mode

當你充電至 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 能夠採取一些節能措施來延長電池壽命的情況下,檢測用戶開啟了低電量模式才是有用的。這裡,蘋果給了一些建議:

  • 停止更新位置
  • 減少用戶交互動畫
  • 關閉數據流量這樣的後臺操作
  • 關閉特效
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。