ios - 通过后台获取的电池状态和电量?

标签 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)
    }

观察者似乎无法使用后台获取,或者我说错了?

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

最佳答案

根据已接受的答案,情况似乎并非如此,但此类问题通常可以归结为试图推迟/取消密集但可自由支配的工作。 如果碰巧是这种情况,那么我很幸运地使用了 NSProcessInfo 低功耗 API。甚至在启用时还会发出通知,这对于取消特别有用。

关于ios - 通过后台获取的电池状态和电量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50922899/

相关文章:

ios - Swift 4 : Variable 'value' inferred to have type 'Void' , 这可能是意想不到的?

iphone - 使用 UIView 动画处理一系列动画的最佳方式

ios - 是否可以在 NSFetchedResultsController 上使用后台线程进行大量读取操作以确保 UI 响应?

swift - didSelectRowAt 在使用 searchBar 时记住第一个元素(indexPath)

安卓/iOS : schedule task while app is in background/off

javascript - 响应式背景问题

objective-c - NSXMLParser findCharacters 返回 "\n "个字符

ios - 如何从另一个 Controller 引发事件。

swift - 使用Vapor框架建立数据库连接

html - Canvas 背景和 HTML <body> 元素