更新:请记住,自iOS 13以来,CoreBluetooth现在支持BLE和经典蓝牙设备
来自苹果:
今年,我们将这两个层合并在一起,现在,您透明访问BR/EDR和低能耗任何东西现在,这对你来说意味着API,您现在可以使用经典设备和低能耗设备设备。[…]这将允许透明地使用GATT和BR/EDR设备。它仍然运行完全相同的蓝牙SIG协议。没有更改,因此您可以在上在线查看此规范蓝牙SIG网站。对于您的应用程序和开发人员,CBPeripheral API完全相同。你仍然可以这样做服务发现并被通知特性的改变。
注意:BR/EDR是指4.0之前蓝牙规范的无线电技术,用于LE设备。点击此处了解更多信息。
我正在尝试使用CoreBluetooth扫描一些蓝牙设备,但我很难发现它们。
我使用苹果公司的示例代码作为参考。
这就是中央管理器的初始化方式:
let cbManager = CBCentralManager(delegate: self, queue: nil)
这就是我扫描外围设备的方式:
cbManager.scanForPeripherals(withServices: nil, options: [CBCentralManagerScanOptionAllowDuplicatesKey: true])
由于我不知道最初应该连接到的serviceUUID
,所以我使用nil作为CBUUID
的列表进行扫描。
当发现外围设备时,我会通过CBCentralManagerDelegate
的centralManager(_:didDiscover:advertisementData:rssi:)
方法得到通知,并保留这些外围设备,这使我能够通过CBPeripheralDelegate
的peripheral(_:didDiscoverServices:)
方法发现它们上的服务。
发现了一个外围设备,并发现了它的服务,我下次可以使用直接连接到该外围设备
cbManager.scanForPeripherals(withServices: [myDiscoveredService], options: nil)
到目前为止,一切都很好。
然而,我似乎甚至无法开始使用未被发现的设备。蓝牙设置应用程序中显示的许多设备都会出现这种情况。
我如何接触那些设备,这些设备对我来说是清晰可见的,但我无法从代码中发现
如果我一开始就知道serviceUUID,会有帮助吗?我如何通过其他方式获得这样的serviceUUID,可能需要额外的工具
我尝试过但没有成功的东西:
使用新Xcode 11中的蓝牙浏览器获取有关设备的信息:虽然我可以获得有关目标蓝牙设备的大量信息(通过"显示设备发现",然后"获取设备信息…"(,但我似乎找不到合适的服务UUID
在扫描时使用数据包记录器实时捕获iOS跟踪(来自相同的附加工具包(:我看到了HCI数据包和HCI事件,但我似乎无法从流量中找出任何有价值的信息
我使用的是iOS 13.2和Xcode 11.2
CoreBluetooth现在支持BLE和经典蓝牙设备。
这是对新功能的误解。正如引用的文本所指出的,"这将允许GATT与BR/EDR设备一起透明使用。"(强调部分添加(
GATT over BR/EDR在蓝牙设备中不是一个特别常见的功能,与音频流设备无关。核心蓝牙仍然不支持A2DP、HID和HFP等其他配置文件。这些可能是您使用的设备所支持的配置文件。
对于我们这些设计蓝牙产品的人来说,这个新功能确实非常强大和令人兴奋,但我们需要更新固件来支持它。这不是你在硬件方面免费获得的。