我正在使用以下代码进行扫描:
self.centralManager?.scanForPeripherals(withServices: serviceUUID, options: nil)
如果我将 serviceUUID
替换为 nil
或将其定义为
let serviceUUID = [CBUUID(string:"1803")]
但它不适用于
let serviceUUID = [CBUUID(string:"00001803-494c-4f47-4943-544543480000")]
用 Lightblue 仔细检查,但服务 UUID 似乎没有任何拼写错误。 Lightblue screenshot
最佳答案
我认为 Larme 已经给出了适当的解决方案,但我会将其表述为答案而不是评论,因为评论可能被忽略了。
您扫描在其广告数据中公开特定服务的外围设备。这意味着整个字符串 00001803-494c-4f47-4943-544543480000
必须是广告数据的一部分。如果没有找到设备,但如果它适用于 1803
,则设备似乎只有 1803
作为服务信息广播。
请检查设备的广告数据。如果他们只暴露了 16 位 UUID,您就找到了问题的原因。
请记住,广告数据的长度限制为 31 个字节,并且每个项目的长度和数据类型声明会进一步减少。因此,仅广播 16 位 UUID 而不会为 128 位 UUID 浪费大部分有效负载是很常见的。
关于ios - 为什么无法发现特定的 BLE 外设服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41752180/