清除iOS BLE缓存

hug*_*gie 7 ios core-bluetooth bluetooth-lowenergy

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

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

刘俊利*_*刘俊利 6

我会推荐最有效和最暴力的解决方案之一,我的方法奏效了!!!

重置你的IPHONE

设置 --> 通用 --> 删除所有内容和设置

之后再次扫描。有效。

另一种方式:

现在让我告诉你解决问题的正确方法:

有2个名字需要考虑。广告名称和 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];
}
Run Code Online (Sandbox Code Playgroud)

使用 [advertisementData objectForKey:CBAdvertisementDataLocalNameKey] 获取外设名称比使用peripheral.name 更精确

因为peripheral.name 获取GAP 名称但[advertisementData objectForKey:CBAdvertisementDataLocalNameKey] 获取更新的名称。

这是屏幕截图