清除iOS可缓存缓存

清除iOS可缓存缓存,ios,bluetooth-lowenergy,core-bluetooth,Ios,Bluetooth Lowenergy,Core Bluetooth,我目前运行的是iOS 7。扫描过程中检索到的外围设备名称似乎是基于地址缓存的。即使使用新值刷新BLE设备的名称,在iOS 7的外围设备发现期间[myCentralManager scanForPeripheralsWithServices:nil options:nil]我在刷新之前获取旧设备名称 有没有办法以编程方式清除BLE设备缓存 即使是手动冲洗,似乎也不可能。在设置->蓝牙下,BLE设备似乎从未被列出,尽管它可以通过编程方式扫描和连接。(按照指示)这是为什么 我会推荐一个最有效、最暴力的

我目前运行的是iOS 7。扫描过程中检索到的外围设备名称似乎是基于地址缓存的。即使使用新值刷新BLE设备的名称,在iOS 7的外围设备发现期间
[myCentralManager scanForPeripheralsWithServices:nil options:nil]我在刷新之前获取旧设备名称

  • 有没有办法以编程方式清除BLE设备缓存
  • 即使是手动冲洗,似乎也不可能。在设置->蓝牙下,BLE设备似乎从未被列出,尽管它可以通过编程方式扫描和连接。(按照指示)这是为什么

  • 我会推荐一个最有效、最暴力的解决方案 我的方法奏效了

    重置你的IPHONE

    设置-->常规-->删除所有内容和设置

    然后再次扫描。成功了

    其他方式:

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

    有2个名字要考虑。广告名称和GAP(通用访问配置文件)名称

    对于iOS以前从未连接过的外设,报告的“name”属性是广告名称。连接后,间隙名称将被缓存,并报告为外围设备的名称。由于广告名称的尺寸限制,GAP名称被认为是一个“更好”的名称

    没有规定两个名字必须匹配。这取决于您的用例和实现。有些人会把空白名称作为固定名称,但广告名称更多的是“别名”,因为它可以很容易地改变。 如果希望两个名称同步,则应同时更改间隙名称和播发名称。正确实施后,您的CB manager代表将收到一个对-peripheralDidUpdateName的调用: 如果要手动清除缓存,则需要重置iOS设备

    链接()

    实际上,此方法(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];
    }
    
    -(无效)中央管理器:(CBCentralManager*)中央发现外围设备:(CBPeripheral*)外围广告数据:(NSDictionary*)广告数据RSSI:(NSNumber*)RSSI{
    NSString*gapName=peripheral.name;
    NSString*identityName=[advertisementData objectForKey:CBAdvertisementDataLocalNameKey];
    }
    
    更确切地说是使用 [advertisementData objectForKey:CBAdvertisementDataLocalNameKey] 获取外围设备名称,而不是 外设名称

    因为peripheral.name获取间隙名称,但[advertisementData objectForKey:CBAdvertisementDataLocalNameKey]获取更新的名称


    有关第二个问题的答案,请参阅我的答案,了解在设置中显示可移动设备的条件->Bluetooth@huggie我在iOS 8上也遇到了同样的问题,你找到解决方案了吗?@Kai不走运。“我似乎总是得到同样的老结果,但我没有找到解决的办法。”Kai顺便说一句,这似乎取决于芯片。某些芯片似乎没有同样的问题。手动关闭蓝牙为我清除了缓存。因此,我假设,通过编程方式关闭和打开蓝牙也可以做到这一点,尽管这不是最好的用户体验。CSS v7§1.2.1:“本地名称数据类型应与分配给设备的本地名称相同,或是其缩写版本。[…]如果名称被缩短,则可通过BR/EDR上的远程名称请求程序或在使用GATT建立连接后通过读取设备名称特征来读取完整名称。缩短的名称应仅包含全名开头的连续字符。例如,如果设备名称为“BT_device”e_Name'则缩写名称可以是'BT_Device'或'BT_Dev'