清除iOS BLE缓存

时间:2015-03-23 05:50:07

标签: ios bluetooth-lowenergy core-bluetooth

我目前在iOS 7上运行。看来在扫描期间检索到的BLE外围设备名称是根据地址缓存的。即使用新值刷新BLE设备的名称,在iOS 7的外围设备发现[myCentralManager scanForPeripheralsWithServices:nil options:nil];期间,我在刷新之前得到旧的设备名称。

  1. 有没有办法以编程方式清除BLE设备缓存?
  2. 即使手动冲洗,似乎也不可能。在设置 - >蓝牙下,BLE设备似乎永远不会被列出,尽管能够以编程方式扫描和连接。 (按照指示here)为什么会这样?

1 个答案:

答案 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]获取更新的名称。

here is the screenshot

相关问题