在iOS 7中,我正在编写一个核心蓝牙应用程序来获取来自一系列外围设备的广告数据包。每个外围设备的广告包中都有一个唯一的UUID,并在LightBlue嗅探器应用程序中显示。
当我在中央管理器中检测到外围设备时,它会分配一个与广告数据包中的UUID不同的UUID。
根据文件:
“中央管理员第一次发现外围设备, 系统会为外围设备分配一个由新NSUUID对象代表的UUID 。您的应用可以存储此UUID和之后将其提供给中央管理器,用于检索此特定外设。外围设备由NSUUID UUID识别,而不是由识别外围设备服务,特性和特性的CBUUID对象识别“
为什么会这样做?
我可以在不连接设备的情况下读取真正的外围设备UUID吗?
如何?
答案 0 :(得分:2)
我认为没有“真正的外设UUID”这样的东西。我的理解是UUID(用于设备/外围设备)是Apple特定的概念,而不是BLE概念。请注意这个讨论:
Corebluetooth, How to get a unique UUID?
OTOH,看来BLE设备确实拥有IEEE定义的唯一MAC / BDADDR地址。我一直在寻找一种方法来部署与平台无关的静态BLE设备配置。我感到沮丧(Apple的UUID是+/-无意义的,MAC / BDADDR可以在大多数/所有其他平台上获得,无法从CoreBluetooth访问)。幸运的是,我注意到“设备信息服务”配置文件(0x180A)包含“系统ID”属性(0x2A23),该属性对设备的唯一MAC / BDADDR地址进行编码。但是,我不知道BLE设备是否必须公开此服务。
答案 1 :(得分:0)
从规范中可以看出,设备信息服务中的系统ID是可选的
事实上,DIS本身也是一项可选服务,例如环境感应配置文件将DIS定义为可选服务。