- 原文链接 : 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 能够采取一些节能措施来延长电池寿命的情况下,检测用户开启了低电量模式才是有用的。这里,苹果给了一些建议:
- 停止更新位置
- 减少用户交互动画
- 关闭数据流量这样的后台操作
- 关闭特效