我正在构建一个Swift应用程序,它可以监控Mac笔记本电脑电池的电池百分比以及充电状态。在iOS上,当设备的电池百分比发生变化时,会发送batteryLevelDidChange通知;当设备插入、拔出电源并充满电时,会发送batteryStateDidChange通知。
在Swift中,或者更具体地说,对于kIOPSCurrentCapacityKey和kIOPSIsChargingKey,这两个通知的macOS等价物是什么?我通读了通知文档,没有看到任何通知。下面是我获取当前电池电量水平和充电状态的代码:
import Cocoa
import IOKit.ps
class MainViewController: NSViewController {
enum BatteryError: Error { case error }
func getMacBatteryPercent() {
do {
guard let snapshot = IOPSCopyPowerSourcesInfo()?.takeRetainedValue()
else { throw BatteryError.error }
guard let sources: NSArray = IOPSCopyPowerSourcesList(snapshot)?.takeRetainedValue()
else { throw BatteryError.error }
for powerSource in sources {
guard let info: NSDictionary = IOPSGetPowerSourceDescription(snapshot, ps as CFTypeRef)?.takeUnretainedValue()
else { throw BatteryError.error }
if let name = info[kIOPSNameKey] as? String,
let state = info[kIOPSIsChargingKey] as? Bool,
let capacity = info[kIOPSCurrentCapacityKey] as? Int,
let max = info[kIOPSMaxCapacityKey] as? Int {
print("\(name): \(capacity) of \(max), \(state)")
}
}
} catch {
print("Unable to get mac battery percent.")
}
}
override func viewDidLoad() {
super.viewDidLoad()
getMacBatteryPercent()
}
}https://stackoverflow.com/questions/51275093
复制相似问题