为什么不能发现特定的BLE外围服务?

时间:2017-01-19 21:38:32

标签: ios swift bluetooth-lowenergy core-bluetooth

我正在使用以下代码进行扫描:

self.centralManager?.scanForPeripherals(withServices: serviceUUID, options: nil)

如果我将tableview替换为serviceUUID或将其定义为

,则此工作正常(我的nil会填充BLE设备)
let serviceUUID = [CBUUID(string:"1803")]

但它无法与

一起使用
let serviceUUID = [CBUUID(string:"00001803-494c-4f47-4943-544543480000")]

使用Lightblue进行双重检查,但服务UUID似乎没有任何拼写错误。 Bin.asBlob()

2 个答案:

答案 0 :(得分:1)

我认为Larme已经给出了相应的解决方案,但我会将其作为答案而不是评论来制定,因为评论可能被忽略了。

您扫描在广告数据中公开特定服务的外围设备。这意味着整个字符串00001803-494c-4f47-4943-544543480000必须是广告数据的一部分。如果找不到设备,但如果它适用于1803,则设备似乎只会将1803广播为服务信息。

请检查设备的广告数据。如果它们只暴露16位UUID,您就找到了问题的原因。

请记住,广告数据的长度限制为31个字节,并且每个项目的长度和数据类型声明会进一步减少这一点。因此,仅广播16位UUID并且不会浪费128位UUID的大部分有效负载是很常见的。

答案 1 :(得分:0)

我相信0x1803的128位UUID版本为00001803-0000-1000-8000-00805F9B34FB。 Light Blue是否在"广告数据(服务UUID)"下显示此值。或者它是否显示00001803-494c-4f47-4943-544543480000?因为无论设备通过GATT响应的实际服务UUID,scanForPeripherals仅返回广告数据中具有指定服务UUID的设备。