我正在使用 Xcode 来开发 MacOS应用,它基于 Swift 编写的 cocoa AppKit

我在整个应用程序中都使用IOBluetoothDevice对象,并且希望能够显示设备的电池电量(如果可以访问的话)。

我希望电池电量水平在操作系统的蓝牙设置上可见的设备(请参见下图)也可以通过编程方式访问(例如AirPods,Magic Keyboard等)。但是,我在任何地方都找不到。

我还考虑过执行终端命令并找到this thread,但它也没有用。

谢谢

swift - 如何使用Swift和AppKit(适用于MacOS的Xcode)获得IOBluetoothDevice的电池电量-LMLPHP

最佳答案

您可以从带有IOKit的IORegistry中获取蓝牙设备的电池电量。

这是获取Magic Trackpad 2电池电量的简单示例

import IOKit

var serialPortIterator = io_iterator_t()
var object : io_object_t
let masterPort: mach_port_t = kIOMasterPortDefault
let matchingDict : CFDictionary = IOServiceMatching("AppleDeviceManagementHIDEventService")
let kernResult = IOServiceGetMatchingServices(masterPort, matchingDict, &serialPortIterator)

if KERN_SUCCESS == kernResult {
    repeat {
        object = IOIteratorNext(serialPortIterator)
        if object != 0, let percent = IORegistryEntryCreateCFProperty(object, "BatteryPercent" as CFString, kCFAllocatorDefault, 0).takeRetainedValue() as? Int {
            print(percent)
            break
        }
    } while object != 0
    IOObjectRelease(object)
}
IOObjectRelease(serialPortIterator)

对于其他设备,您必须将AppleDeviceManagementHIDEventServiceTrackpad2替换为适当的值。您可以使用ioreg -l在Terminal.app中显示整个IORegistry。

关于swift - 如何使用Swift和AppKit(适用于MacOS的Xcode)获得IOBluetoothDevice的电池电量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55785359/

10-11 16:29