蓝牙扫描无法在设置应用程序(核心蓝牙)中发现iPhone可见的设备



更新:请记住,自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的列表进行扫描。

当发现外围设备时,我会通过CBCentralManagerDelegatecentralManager(_:didDiscover:advertisementData:rssi:)方法得到通知,并保留这些外围设备,这使我能够通过CBPeripheralDelegateperipheral(_: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等其他配置文件。这些可能是您使用的设备所支持的配置文件。

对于我们这些设计蓝牙产品的人来说,这个新功能确实非常强大和令人兴奋,但我们需要更新固件来支持它。这不是你在硬件方面免费获得的。

最新更新