当前位置: 首页 > 面试题库 >

使用Swift获取MacBook的电池状态

欧阳嘉年
2023-03-14
问题内容

我想设置一个Playground,以获取Macbook的电池状态。

我已经尝试了以下方法:

import Cocoa
import IOKit
import Foundation

var blob = IOPSCopyPowerSourcesInfo()

我目前收到如下错误

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


问题答案:

它在Playground中不起作用,但在真实的应用程序中起作用。

但是,我只能IOPowerSources.h用Swift 无法访问头文件import IOKit:我不得不与Objective-C建立桥梁。

这是我的解决方案:

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

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

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

  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())

结果:

=内部; 类型= InternalBattery; } )



 类似资料:
  • 问题内容: 如何获得电池电量和状态(插入,放电,充电等)?我研究了开发人员文档,并找到了BatteryManager类。但是它不包含任何方法,仅包含常量。我什至如何使用它? 问题答案: 这是一个代码示例,解释了如何获取电池信息。 综上所述,动态地设置了该意图的广播接收器,因为只有通过使用显式注册它才能通过清单中声明的​​组件来接收它。

  • 问题内容: 我想弄清楚当前的电池容量和设计容量​​。 到目前为止,我能使用的是Win32_Battery()类,该类不能提供我需要的所有信息(至少在我的系统上不提供)。我为此使用了纯Python的wmi库。 另一方面,我发现此方法在Python中有效,如何检测计算机是否由电池供电?,但是很遗憾,它也没有提供有关“容量”的任何信息。 为此,电池信息结构和电池状态结构似乎很完美。现在,我知道必须使用D

  • 实现很漂亮的电池柱状图Demo,有三维效果。有3种自定义样式,可以进行扩展。 [Code4App.com]

  • 问题内容: 我刚启动Swift,一直在寻找一种检查电池电量的方法。我找到了该资源并一直在使用它,但是由于某种原因似乎无法使它正常工作。 我不太确定如何解决此问题。有任何想法吗? 问题答案: Xcode 11•Swift 5.1 首先只需启用电池监控: 然后,您可以创建一个计算属性以返回电池电量: 电池电量从0.0(完全放电)到1.0(100%充电)。访问此属性之前,请确保已启用电池监视。如果未启用

  • 问题内容: 表现: 在此代码中,Toast始终显示“不收费!”。我在实际设备上进行了测试,将其插入交流或USB电源时,它仍显示“ Not Charging!”(未充电!)。吐司 问题答案: 您无法通过清单进行注册,因此您不会收到这些广播。您正在尝试从中获得额外收入,而这些没有额外收入(例如)。结果,您将获得默认值。

  • 我正在尝试构建一个应用程序,以获取当前连接的蓝牙耳机的电池电量。此应用程序可以在没有内置此功能的手机上使用 在stackoverflow上搜索时,我发现如何在android中获取蓝牙耳机电池状态这个问题。我使用BluetoothProfile获得了当前连接的蓝牙耳机。耳机情景模式 但是在BluetoothDevice类型的device对象中,我看不到任何获取蓝牙耳机电池电量的方法或属性 我可以获取