gpt4 book ai didi

swift - 如何从 BLE 搜索查询中排除某些设备?

转载 作者:可可西里 更新时间:2023-11-01 01:57:31 25 4
gpt4 key购买 nike

我正在编写自定义蓝牙连接器,我希望搜索查询与 mac 操作系统中的标准蓝牙应用程序完全相同。我怎样才能做到这一点?我正在使用 CoreBluetooth 和 IOBluetooth 框架来实现这一点,但我得到了各种设备,包括电视等。

来自docs我了解我想在

中提供特定服务
.scanForPeripherals(withServices: [CBUUID], options: nil)

但是什么服务?我还找到了默认的 Xcode 蓝牙连接器,但它不包含源代码。

现在我的代码是:

let cbuuids = [CBUUID(string: "0x180A"), CBUUID(string: "0x1801"), CBUUID(string: "0x1800"), CBUUID(string: "0x1812")]

func centralManagerDidUpdateState(_ central: CBCentralManager) {
switch central.state {
case .poweredOn:
print("powered on")
central.scanForPeripherals(withServices: cbuuids, options: nil)
case .unknown:
print("state unknown")
case .resetting:
print("resetting")
case .unsupported:
print("unsupported")
case .unauthorized:
print("unauthorized")
case .poweredOff:
print("powered off")
}
}

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
print(peripheral.name)
devices.append(peripheral)
devices = devices.unique

tableView.reloadData()
scrubber.reloadData()

}

我正在将搜索查询加载到触摸栏的洗涤器,但这不是重点。

有什么方法可以匹配标准应用程序中的原始设备列表吗?任何建议表示赞赏。

最佳答案

你的代码看起来不错但是

let cbuuids = [CBUUID(string: "0x180A"), CBUUID(string: "0x1801"), CBUUID(string: "0x1800"), CBUUID(string: "0x1812")]

您包括默认 UUID,例如 0x180A设备信息服务我认为它包含在所有设备广告中。

因此,当您使用此 UUID 进行搜索时,所有设备都会出现在发现中。阅读更多 here关于 Gatt 服务

因此解决方案是在您的搜索中仅添加用户定义的自定义服务 UUID。

另请注意,UUID 必须包含在您尝试在搜索中查找的设备的广告数据包中。您可以阅读有关广告数据的更多信息 here

关于swift - 如何从 BLE 搜索查询中排除某些设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50717493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com