【发布时间】:2018-06-19 07:32:09
【问题描述】:
我想知道应用程序的用户何时插入或拔出手机充电器,即使应用程序处于后台也是如此。我可以通过 NetworkReachability (wifi、ondata、不可访问、不确定...)来做到这一点,但不能通过电池电量或电池状态来做到这一点。 只有当应用程序处于前台或处于活动状态时,我才能知道电池电量和电池状态,这与她在后台时不同。
我可以为电池电量(或状态)设置后台获取吗?如果用户拔掉他的充电器,我会启动一个功能或打印(或其他)。
我可以在电池电量或状态上设置监听器吗?因为这就是我为 NetworkReachability 所做的,但我发现只有观察者可用于电池特性。
func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
if let a = window?.rootViewController as? UIViewController{
UIDevice.current.isBatteryMonitoringEnabled = true
NotificationCenter.default.addObserver(self, selector: #selector(self.batteryStateDidChange), name: .UIDeviceBatteryStateDidChange, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.batteryLevelDidChange), name: .UIDeviceBatteryLevelDidChange, object: nil)
completionHandler(.newData)
}
else{
completionHandler(.noData)
}
而且似乎观察者不使用后台提取,或者我说错了?
非常感谢您的帮助,祝大家有个愉快的一天!
【问题讨论】:
-
您不能/不应该在后台获取操作中使用观察者或计时器。操作系统会给你一个有限的时间段,让你在操作系统选择的随机时间在后台获取一些数据。预计后台操作应及时返回,因为您获得的时间段会受到限制。如果需要很长时间,操作系统可能会终止该操作,然后不会给您的应用太多(如果有)时间用于未来的后台提取,如果 Apple 检测到您在做什么,他们可能会拒绝您的应用
-
是的,我知道了,请问如何为电池电量(和状态)设置监听器?
-
当应用程序处于后台时,您不能这样做。
-
但我可以这样做来检查网络可达性。如果用户使用 WiFi 或数据,后台获取会告诉我。感谢一位听众....
-
如果我没记错的话,NetworkReachability 类甚至不是 Apple 类,它是作为 AFNetworking / Alamofire 的一部分构建的。它完全不同。您可以使用UIDevice class 获取电池状态和电量。它具有电池电量和状态的属性。您还可以在不在后台时监视更改
标签: ios swift background fetch battery