我想监视手表的电池状态,所以我为这样的电池状态添加了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
}
但是当输入/输出插头充电器没有被调用。 任何许可,否则我会丢失什么?
答案 0 :(得分:2)
据我从文档中看到的内容,并没有明确说明此属性符合KVO。
在WatchKit文档中,他们说:
如果启用了电池监视,则此属性设置为一个值 在0.0(0%电量)和1.0(100%电量)之间。当电池状态 属性设置为WKInterfaceDeviceBatteryState.unknown(例如, 禁用电池监视时)为-1.0。
因此isBatteryMonitoringEnabled
似乎使您能够通过询问电池的值(通过轮询)而不是观察电池来读取电池。