Смотреть ОС: Swift KVO для BatteryState не работает - PullRequest
0 голосов
/ 29 ноября 2018

Я хочу отслеживать состояние батареи часов, поэтому я добавил 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 голосов
/ 29 ноября 2018

Насколько я вижу из документации, не указано четко, что это свойство соответствует KVO.
В документации WatchKit говорится:

Если контроль батареи включен,для этого свойства установлено значение от 0,0 (0% заряда) до 1,0 (100% заряда).Когда для свойства batteryState установлено значение WKInterfaceDeviceBatteryState.unknown (например, когда мониторинг заряда батареи отключен), это значение равно -1,0.

Так что, похоже, isBatteryMonitoringEnabled просто включаетчитать батарею, спрашивая ее значение (путем опроса) вместо того, чтобы наблюдать за ней.

...