iOS 在 8.2 上启动一些应用程序后蓝牙 UUID 发生变化

iOS Bluetooth UUID changes after a few app launches on 8.2

我有一个通过低功耗蓝牙连接到 CC2541 的应用程序。我只是想缓存每台设备独有的内容,以便用户仅连接到 "their" 设备。我试过使用

- (NSArray *)retrievePeripheralsWithIdentifiers:(NSArray *)identifiers

甚至扫描和比较已扫描外围设备的 UUID,但我必须 select 每隔几次应用程序启动一次新生成的 UUID。相同的代码在 8.1 上运行良好,我很少(如果有的话)不得不 select 一个新的 UUID。

我曾讨论过在设备信息服务中检查系统 ID (2A23 uuid),但这需要一个连接来检查地址,所以我必须连接到附近的每个外围设备,获取并比较系统 ID , 然后保持连接或断开连接并检查下一个。

我 运行 的 CC2541 代码没有使用配对,我想保持这种状态。我很好奇是否还有其他人找到了解决这种情况的方法。

在这条路上,花了数周时间寻找解决限制的方法,我找到的唯一方法是如果您可以控制硬件并且可以将您自己的唯一标识符放入广告数据包中。虽然人们可以对它的(不)理智做出各种断言,但它就是这样。

我只是想post这里的一些代码,将来可能会对其他人有所帮助。

把它放在函数之外的某个地方:

__xdata __no_init uint8 BT_MAC_ADDR[6] @ 0x780E;

将其放入您的 advertData 数组中:

7, //length of data
GAP_ADTYPE_MANUFACTURER_SPECIFIC, //Custom data
0,0,0,0,0,0,  //Placeholder bytes

最后在调用 GAPRole_SetParameter 之前更新 advertData。

uint8 advertSize = sizeof(advertData);
memcpy(&advertData[advertSize-6], BT_MAC_ADDR, 6);