观看操作系统:BatteryState的Swift KVO无法正常工作

时间:2018-11-29 14:23:00

标签: swift key-value-observing watch-os-4

我想监视手表的电池状态,所以我为这样的电池状态添加了KVO

private func setupNotification() {

    WKInterfaceDevice.current().addObserver(self,
                                            forKeyPath: #keyPath(WKInterfaceDevice.batteryState),
                                            options: [.new],
                                            context: nil)
}

override public func observeValue(forKeyPath keyPath: String?,
                                  of object: Any?,
                                  change: [NSKeyValueChangeKey: Any]?,
                                  context: UnsafeMutableRawPointer?) {
    if keyPath == #keyPath(WKInterfaceDevice.batteryState) {
        switch WKInterfaceDevice.current().batteryState {
        case .charging:
            self.stopMonitoring()
        case .unplugged:
            if BatteryManager.batteryLevel > Constant.Battery.criticalValue {
                self.startMonitoring()
            }
        default:
            break
        }
    }
}

我还添加了

func enableBatteryMonitoring() {
    WKInterfaceDevice.current().isBatteryMonitoringEnabled = true
}

但是当输入/输出插头充电器没有被调用。 任何许可,否则我会丢失什么?

1 个答案:

答案 0 :(得分:2)

据我从文档中看到的内容,并没有明确说明此属性符合KVO。
在WatchKit文档中,他们说:

  

如果启用了电池监视,则此属性设置为一个值   在0.0(0%电量)和1.0(100%电量)之间。当电池状态   属性设置为WKInterfaceDeviceBatteryState.unknown(例如,   禁用电池监视时)为-1.0。

因此isBatteryMonitoringEnabled似乎使您能够通过询问电池的值(通过轮询)而不是观察电池来读取电池。