我目前运行在iOS 7上,在扫描过程中检索到的BLE外围设备名称似乎是根据地址缓存的。即使当BLE设备的名称被一个新值刷新时,在iOS 7的外围设备发现[myCentralManager scanForPeripheralsWithServices:nil options:nil];期间,我也会在刷新之前得到旧的设备名称。
发布于 2017-11-06 02:56:12
我会推荐一个最有效和暴力的解决方案,我的方法奏效了!
重置你的IPHONE
设置->一般->删除所有内容和设置
然后再扫描一遍。啊,真灵。
其他方式:
现在让我告诉你们解决这个问题的正确方法:
有两个名字需要考虑。广告名称和GAP (通用访问配置文件)名称。
对于iOS从未连接过的外围设备,所报告的“名称”属性是广告名称。连接之后,GAP名称将被缓存,并被报告为外围设备的名称。由于广告名称的大小限制,GAP名称被认为是“更好”的名称。
没有规定这两个名字必须匹配。这取决于您的用例和实现。有些人会认为GAP名称是固定的名称,但是广告名称更多的是一个“别名”,因为它很容易被更改。
如果希望两个名称同步,则应将间隙名称与广告名称一起更改。正确实现后,CB管理器委托将收到对-peripheralDidUpdateName的调用:如果要手动清除缓存,则需要重置iOS设备。
链接(https://forums.developer.apple.com/thread/19381)
实际上,这个方法(peripheralDidUpdateName)没有被调用。
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<NSString *,id> *)advertisementData RSSI:(NSNumber *)RSSI {
NSString * gapName = peripheral.name;
NSString * identityName = [advertisementData objectForKey:CBAdvertisementDataLocalNameKey];
}使用advertisementData objectForKey:CBAdvertisementDataLocalNameKey获取外围名称比使用peripheral.name更准确
因为peripheral.name获得了GAP名称,但是advertisementData objectForKey:CBAdvertisementDataLocalNameKey获得了更新的名称。

https://stackoverflow.com/questions/29203983
复制相似问题