电池状态和级别归功于后台提取?

时间:2018-06-19 07:32:10

标签: ios swift background fetch battery

我想知道即使应用程序在后台,应用程序的用户何时插入或拔掉手机的充电器。我可以使用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)
    }

看起来好像观察者不能使用背景提取,或者我认为错了?

我非常感谢你的帮助,祝大家度过愉快的一天!

2 个答案:

答案 0 :(得分:0)

我建议在iOS中提供的背景模式中查看此article,它会说明有哪些背景模式以及可以使用它们的内容。

Apple不会主要使用核心动作来检测驾驶时间,它知道我的手机在我移动之前通过蓝牙连接到汽车时就会开车。对你的两个问题的简短回答是......

当你的应用程序在后台时,它并没有真正运行。它处于悬浮状态。当你第一次背景时,你有足够的时间在完全背景但不长的时候做东西。一旦背景,你只能做背景提取,控制音频(在应用之前已经在应用程序中启动),GPS位置更新和推送通知(我认为这就是所有这些)。

因此,您无法在后台运行长时间运行的任务来监控电池电量或使用核心运动来检测运动。你可以使用GPS,如果速度增加超过人们可以达到的预期,那么你可以假设他们正在驾驶。

答案 1 :(得分:0)

基于已接受的答案,似乎并非如此,但是通常这些类型的问题归结为试图推迟/取消密集的问题,但采取其他酌处方式。 如果确实是这种情况,那么我很幸运使用NSProcessInfo低功耗API。启用时甚至还会有一条通知,这对于取消特别有用。