如何使用 Swift 和 AppKit(MacOS 的 Xcode)获取 IOBluetoothDevice 的电池电量

Ori*_*Ori 11 macos cocoa appkit swift

我正在使用Xcode开发基于CocoaAppKit、用Swift编写的MacOS 应用程序

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

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

我也想过执行终端命令并找到这个线程,但它也不起作用。

谢谢

操作系统可用的蓝牙设备电池电量

vad*_*ian 6

您可以使用 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)
Run Code Online (Sandbox Code Playgroud)

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