首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >macOS上是否有相当于kIOPSCurrentCapacityKey的电池电量did更改通知?

macOS上是否有相当于kIOPSCurrentCapacityKey的电池电量did更改通知?
EN

Stack Overflow用户
提问于 2018-07-11 07:10:56
回答 0查看 510关注 0票数 3

我正在构建一个Swift应用程序,它可以监控Mac笔记本电脑电池的电池百分比以及充电状态。在iOS上,当设备的电池百分比发生变化时,会发送batteryLevelDidChange通知;当设备插入、拔出电源并充满电时,会发送batteryStateDidChange通知。

在Swift中,或者更具体地说,对于kIOPSCurrentCapacityKeykIOPSIsChargingKey,这两个通知的macOS等价物是什么?我通读了通知文档,没有看到任何通知。下面是我获取当前电池电量水平和充电状态的代码:

代码语言:javascript
复制
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()
}
}
EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51275093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档