3

在 iOS 7 中,我正在编写一个核心蓝牙应用程序来从一系列外围设备获取广告包。每个外围设备在其广告数据包中都有一个唯一的 UUID,并显示在 LightBlue 嗅探器应用程序中。

当我在中央管理器中检测到外围设备时,它会分配一个与广告数据包中的 UUID 不同的 UUID。

根据文档:

“中央管理器第一次发现外围设备时,系统会为外围设备分配一个 UUID,由新的 NSUUID 对象表示。您的应用程序可以存储此 UUID,然后将其提供给中央管理器以用于检索此特定外围设备。外围设备是由 NSUUID UUID 标识,而不是由标识外围设备的服务、特征和特征的 CBUUID 对象标识”

为什么这样做?

我可以在不连接设备的情况下读取真正的外围 UUID 吗?

如何?

4

2 回答 2

3

我认为没有“真正的外围 UUID”这样的东西。我的理解是 UUID(用于设备/外围设备)是 Apple 特有的概念,而不是 BLE 概念。记下这个讨论:

Corebluetooth,如何获得唯一的 UUID?

OTOH,似乎 BLE 设备确实拥有 IEEE 定义的唯一 MAC/BDADDR 地址。我一直在寻找一种方法来部署与平台无关的 BLE 设备静态配置。我越来越气馁(Apple 的 UUID +/- 毫无意义,并且可以在大多数/所有其他平台上获得的 MAC/BDADDR 无法从 CoreBluetooth 访问)。幸运的是,我注意到“设备信息服务”配置文件 (0x180A) 包含一个“系统 ID”属性 (0x2A23),它对设备的唯一 MAC/BDADDR 地址进行编码。但是,我不知道 BLE 设备是否必须公开此服务。

于 2014-02-15T04:17:14.377 回答
0

从规范中可以看出 System ID 在设备信息服务中是可选的

链接https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.service.device_information.xml

而事实上DIS本身也是一项可选服务,例如The Environmental Sensing Profile将DIS定义为一项可选服务。

于 2016-11-17T00:45:56.600 回答