蓝牙扫描未发现设置应用程序 (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
的列表进行扫描。
当发现外围设备时,我会通过 CBCentralManagerDelegate
的 centralManager(_:didDiscover:advertisementData:rssi:)
方法收到通知,我会保留这些外围设备,这使我可以通过 [=18] 发现它们上的服务=] CBPeripheralDelegate
.
方法
发现外围设备并发现其服务后,下次我可以直接连接到该外围设备:
cbManager.scanForPeripherals(withServices: [myDiscoveredService], options: nil)
到目前为止,还不错。
但是,我什至无法开始使用未被发现的设备。出现在蓝牙设置应用程序中的许多设备都会出现这种情况。
如何接触到那些设备清晰可见但无法从代码中发现的设备?
如果我知道开头的 serviceUUID 会有帮助吗?我如何通过其他方式(可能使用其他工具)获得此类 serviceUUID?
我尝试过但无效的方法:
使用新 Xcode 11 additional tools 中的蓝牙资源管理器获取有关设备的信息:尽管我可以获得有关目标蓝牙设备的大量信息(通过 "Show Device Discovery" ,然后"Get device info..."),我好像找不到合适的服务UUID
使用数据包记录器在扫描时实时捕获 iOS 跟踪(来自相同的附加工具包):我看到 HCI 数据包和 HCI 事件,但我似乎看不到从该流量中找出任何有价值的信息
我正在使用 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 等其他配置文件。这些可能是您正在使用的设备支持的配置文件。
对于我们这些设计蓝牙产品的人来说,这个新功能确实是非常强大和令人兴奋的,但我们需要更新我们的固件来支持它。这不是你在硬件方面免费获得的东西。
更新:请记住,自 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
的列表进行扫描。
当发现外围设备时,我会通过 CBCentralManagerDelegate
的 centralManager(_:didDiscover:advertisementData:rssi:)
方法收到通知,我会保留这些外围设备,这使我可以通过 [=18] 发现它们上的服务=] CBPeripheralDelegate
.
发现外围设备并发现其服务后,下次我可以直接连接到该外围设备:
cbManager.scanForPeripherals(withServices: [myDiscoveredService], options: nil)
到目前为止,还不错。
但是,我什至无法开始使用未被发现的设备。出现在蓝牙设置应用程序中的许多设备都会出现这种情况。
如何接触到那些设备清晰可见但无法从代码中发现的设备?
如果我知道开头的 serviceUUID 会有帮助吗?我如何通过其他方式(可能使用其他工具)获得此类 serviceUUID?
我尝试过但无效的方法:
使用新 Xcode 11 additional tools 中的蓝牙资源管理器获取有关设备的信息:尽管我可以获得有关目标蓝牙设备的大量信息(通过 "Show Device Discovery" ,然后"Get device info..."),我好像找不到合适的服务UUID
使用数据包记录器在扫描时实时捕获 iOS 跟踪(来自相同的附加工具包):我看到 HCI 数据包和 HCI 事件,但我似乎看不到从该流量中找出任何有价值的信息
我正在使用 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 等其他配置文件。这些可能是您正在使用的设备支持的配置文件。
对于我们这些设计蓝牙产品的人来说,这个新功能确实是非常强大和令人兴奋的,但我们需要更新我们的固件来支持它。这不是你在硬件方面免费获得的东西。