【问题标题】:Fetch the battery status of my MacBook with Swift使用 Swift 获取我的 MacBook 的电池状态
【发布时间】:2015-07-26 04:02:51
【问题描述】:

我想设置一个 Playground 来获取我的 macbook 的电池状态。

我已经尝试了以下方法:

import Cocoa
import IOKit
import Foundation

var blob = IOPSCopyPowerSourcesInfo()

我目前收到如下错误

使用未解析的标识符“IOPSCopyPowerSourcesInfo”

【问题讨论】:

    标签: macos swift cocoa battery batterylevel


    【解决方案1】:

    它在 Playground 中不起作用,但在实际应用中起作用。

    我无法仅使用 Swift 和 import IOKit 访问 IOPowerSources.h 头文件,但是:我必须搭桥到 Objective-C。

    这是我的解决方案:

    1. IOKit.framework 添加到您的项目中(在Linked Frameworks and Libraries 中单击+

    2. 创建一个新的空.m 文件,无论其名称如何。然后 Xcode 会询问它是否应该创建一个“桥接头”。说是。

    3. 忽略.m 文件。在 Xcode 刚刚创建的新 YOURAPPNAME-Bridging-Header.h 文件中,添加行 #import <IOKit/ps/IOPowerSources.h> (不要在您的 Swift 文件中添加 import IOKit

    4. 您现在可以访问大部分IOPowerSources 功能。

    示例:

    func getBatteryStatus() -> String {
        let timeRemaining: CFTimeInterval = IOPSGetTimeRemainingEstimate()
        if timeRemaining == -2.0 {
            return "Plugged"
        } else if timeRemaining == -1.0 {
            return "Recently unplugged"
        } else {
            let minutes = timeRemaining / 60
            return "Time remaining: \(minutes) minutes"
        }
    }
    
    let batteryStatus = getBatteryStatus()
    print(batteryStatus)
    

    注意:我无法访问像 kIOPSTimeRemainingUnlimitedkIOPSTimeRemainingUnknown 这样的常量,所以我使用了它们的原始值(-2.0 和 -1.0),但如果它们仍然存在于某个地方,最好找到这些常量。

    另一个例子IOPSCopyPowerSourcesInfo

    let blob = IOPSCopyPowerSourcesInfo()
    let list = IOPSCopyPowerSourcesList(blob.takeRetainedValue())
    print(list.takeRetainedValue())
    

    结果:

    (
    {
    "电池提供剩余时间" = 1;
    BatteryHealth = 好;
    当前 = 0;
    “当前容量” = 98;
    设计周期计数 = 1000;
    "硬件序列号" = 1X234567XX8XX;
    “已收费”= 1;
    “正在充电”= 0;
    “存在”= 1;
    “最大容量”= 100;
    名称 = "InternalBattery-0";
    “电源状态”=“交流电源”;
    “清空时间”= 0;
    “充满电的时间”= 0;
    “传输类型”= 内部;
    类型 = 内置电池;
    }
    )

    【讨论】:

    • 谢谢!我会试一试,然后给你回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多