蓝牙扫描未发现设置应用程序 (CoreBluetooth) 中 iPhone 可见的设备

Bluetooth scan does not discover devices visible to the iPhone in settings app (CoreBluetooth)

更新:请记住,自 iOS13 起,CoreBluetooth 现在支持 BLE 和经典蓝牙设备。

来自 Apple:

This year, we've merged the two layers together, and now, you have transparent access to both BR/EDR and low energy without doing anything. Now, what this means for you is without much changes in the API, you can now work with both the classic devices and the low energy devices. [...] This now will allow transparent use of GATT with the BR/EDR devices. It's still running the exact same Bluetooth SIG protocol. There's no changes to that, and so you can look at this specification online on the Bluetooth SIG website. To your application and to the developer, the CBPeripheral APIs are exactly the same. You can still do the same service discovery and be notified of changes to characteristics.

注:BR/EDR指4.0之前蓝牙规范的无线电技术,用于LE设备。更多信息 here.


我正在尝试使用 CoreBluetooth 扫描某些蓝牙设备,但我无法发现它们。

我正在使用 Apple's sample code from this talk 作为参考。

这是 Central Manager 的初始化方式:

let cbManager = CBCentralManager(delegate: self, queue: nil)

这是我扫描外围设备的方式:

cbManager.scanForPeripherals(withServices: nil, options: [CBCentralManagerScanOptionAllowDuplicatesKey: true])

因为我不知道我最初应该连接的serviceUUID,所以我用nil作为CBUUID的列表进行扫描。

当发现外围设备时,我会通过 CBCentralManagerDelegatecentralManager(_:didDiscover:advertisementData:rssi:) 方法收到通知,我会保留这些外围设备,这使我可以通过 [=18] 发现它们上的服务=] CBPeripheralDelegate.

方法

发现外围设备并发现其服务后,下次我可以直接连接到该外围设备:

cbManager.scanForPeripherals(withServices: [myDiscoveredService], options: nil)

到目前为止,还不错。

但是,我什至无法开始使用未被发现的设备。出现在蓝牙设置应用程序中的许多设备都会出现这种情况。

如何接触到那些设备清晰可见但无法从代码中发现的设备?

如果我知道开头的 serviceUUID 会有帮助吗?我如何通过其他方式(可能使用其他工具)获得此类 serviceUUID?

我尝试过但无效的方法:

我正在使用 iOS 13.2 和 Xcode 11.2

CoreBluetooth now supports both BLE and classic Bluetooth devices.

这是对新功能的误解。正如引用的文字注释,"This now will allow transparent use of GATT with the BR/EDR devices."(强调)

GATT over BR/EDR 在蓝牙设备中不是特别常见的功能,与音频流设备无关。 Core Bluetooth 仍然不支持 A2DP、HID 和 HFP 等其他配置文件。这些可能是您正在使用的设备支持的配置文件。

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