iOS电池电量与低电量模式

DexterTme 8年前
   <p>优步最近公布的数据显示, <a href="/misc/goto?guid=4959673991966917150" rel="nofollow,noindex">当电池快没电的时候,人们更愿意接受溢价</a> 。同时,优步也表明他们并没有利用电量相关的数据来设置溢价规则。换句话说,我们在开发App的时候,可以通过电池电量来"提升用户体验"。</p>    <h3>电池状态与电量</h3>    <p>UIDevice 中有三个电池相关的属性:</p>    <pre>  <code class="language-objectivec">@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  </code></pre>    <p>我们可以通过 batteryState 来获取电池状态,通过 batteryLevel 来获取电池电量信息。</p>    <p>值得一提的是,在获取电池信息之前,需要手动设置 batteryMonitoringEnabled 为 YES ,不然 batterystate 会返回 Unkonw .</p>    <p>如果想要订阅电池状态,可以注册为以下两个通知的观察者:</p>    <pre>  <code class="language-objectivec">UIKIT_EXTERN NSString *const UIDeviceBatteryStateDidChangeNotification;    UIKIT_EXTERN NSString *const UIDeviceBatteryLevelDidChangeNotification;  </code></pre>    <p>batteryLevel 的值每改变 0.05(也就是电池电量的 <strong>5%</strong> ), 就会触发一次 UIDeviceBatteryLevelDidChangeNotification 。</p>    <h3>低电量模式</h3>    <p>为了解决续航问题,Apple 在 iOS 9 中为 iPhone 添加了 <a href="/misc/goto?guid=4959673992046498896" rel="nofollow,noindex">低电量模式</a> 。在此模式下,系统会通过禁用一些特性诸如电子邮件自动获取、后台刷新、Hey Siri等,来达到降低能耗的目的。</p>    <p>低电量模式的设置藏得比较深,以至于从设置中找到它对大多数人来说是一件非常困难的事。换句话说,用户打开了低电量模式,才能真正说明用户所处的情景需要尽可能地节约电量。因此,相比较于直接获取电池电量来说,探测低电量模式是否开启,更能直观地反应产品情景和用户心理。</p>    <p>检测低电量模式</p>    <p>在 iOS 9 中,我们可以很容易地检测到用户是否开启了低电量模式, NSProcessInfo 提供了相对于的属性。</p>    <pre>  <code class="language-objectivec">if ([[NSProcessInfo processInfo] isLowPowerModeEnabled])    {    // 做低电量模式下该做的事  }  </code></pre>    <p>同时,如果想要对低电量模式的变化做出响应,可以注册为以下通知的观察者:</p>    <pre>  <code class="language-objectivec">NSString * const NSProcessInfoPowerStateDidChangeNotification;    </code></pre>    <p>当我们检测低电量模式的时候,需要注意以下两点:</p>    <ul>     <li>低电量模式仅支持 iOS 9 。当 App 需要兼容更早的版本时,先检查api的可用性。</li>     <li>低电量模式仅适用于 iPhone ,在 iPad 中, isLowPowerModeEnabled 的返回值始终为 NO</li>    </ul>    <p>当我们检测到用户开启了低电量模式,可以为用户做一些小改变,来帮助用户延长电池续航。以下是 Apple 给出一些建议:</p>    <ul>     <li>停止使用定位服务</li>     <li>减弱动画效果</li>     <li>停止后台任务(比如网络请求)</li>     <li>禁用运动追踪</li>    </ul>    <p>参考资料</p>    <ul>     <li><a href="/misc/goto?guid=4959673992139535821" rel="nofollow,noindex">Energy Efficiency Guide for iOS Apps</a></li>     <li><a href="/misc/goto?guid=4959673992230643989" rel="nofollow,noindex">WWDC 2015 Session 707 Achieving All-day Battery Life</a></li>     <li><a href="/misc/goto?guid=4959673992313410756" rel="nofollow,noindex">Detecting low power mode</a></li>    </ul>    <p> </p>    <p>来自: <a href="/misc/goto?guid=4959673992412639888" rel="nofollow">http://shengpan.net/battery/</a></p>    <p> </p>