我目前在iOS 7上运行。看来在扫描期间检索到的BLE外围设备名称是根据地址缓存的。即使用新值刷新BLE设备的名称,在iOS 7的外围设备发现[myCentralManager scanForPeripheralsWithServices:nil options:nil];
期间,我在刷新之前得到旧的设备名称。
答案 0 :(得分:2)
我会推荐一种最有效和最暴力的解决方案 我的方法很有效!!!
重置您的IPHONE
设置 - >一般 - >删除所有内容和设置
之后再扫描一遍。它奏效了。
其他方式:
现在让我告诉你解决问题的正确方法:
有两个名字需要考虑。广告名称和GAP(通用访问配置文件)名称。
对于iOS之前从未连接过的外围设备,' name'报告的属性是广告名称。连接后,缓存GAP名称,并将其报告为外围设备的名称。 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]获取更新的名称。