ios - 为什么无法发现特定的 BLE 外设服务?

标签 ios swift bluetooth-lowenergy core-bluetooth

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

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/

相关文章:

不允许 Swift 蓝牙写入

raspberry-pi - bluez5 ble 广告在第一次连接后停止

ios - iOS 7.0 及更高版本的 iOS 设备的唯一标识

ios - 为什么我的自定义 View 不可见?

ios - AFNetworking 可达性状态未改变

ios - 使用 TrueTime 获取设备独立时间的可靠性如何?

ios - 核心数据——高效地查找或创建

ios - 切换相机后音频/视频不同步

ios - 如何重试失败的网络请求

android - bindservice 中的 onServiceConnected 只被调用一次