我正在编写自定义蓝牙连接器,我希望搜索查询与mac os中的标准蓝牙应用程序完全相同。我怎样才能做到这一点?我使用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()
}
我正在将搜索查询加载到触控栏的滑块,但这不是重点。
有没有办法匹配标准应用中的原始设备列表?任何建议都表示赞赏。
答案 0 :(得分:1)
您的代码看起来不错,但
let cbuuids = [CBUUID(string: "0x180A"), CBUUID(string: "0x1801"), CBUUID(string: "0x1800"), CBUUID(string: "0x1812")]
您是否包含默认UUID,例如 0x180A 是设备信息服务 我认为它包含在所有设备广告中。
因此,当您使用此UUID进行搜索时,所有设备都会出现在发现中。 阅读更多关于Gatt服务的here
因此,解决方案是仅在搜索中添加用户定义的自定义服务UUID。
另请注意,UUID必须包含在您尝试在搜索中找到的设备的广告数据包中。 您可以阅读有关广告数据here
的更多信息