我正在使用以下代码进行扫描:
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()
答案 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的设备。