首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >清除iOS BLE缓存

清除iOS BLE缓存
EN

Stack Overflow用户
提问于 2015-03-23 05:50:07
回答 1查看 10K关注 0票数 7

我目前运行在iOS 7上,在扫描过程中检索到的BLE外围设备名称似乎是根据地址缓存的。即使当BLE设备的名称被一个新值刷新时,在iOS 7的外围设备发现[myCentralManager scanForPeripheralsWithServices:nil options:nil];期间,我也会在刷新之前得到旧的设备名称。

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

回答 1

Stack Overflow用户

发布于 2017-11-06 02:56:12

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

重置你的IPHONE

设置->一般->删除所有内容和设置

然后再扫描一遍。啊,真灵。

其他方式:

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

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

对于iOS从未连接过的外围设备,所报告的“名称”属性是广告名称。连接之后,GAP名称将被缓存,并被报告为外围设备的名称。由于广告名称的大小限制,GAP名称被认为是“更好”的名称。

没有规定这两个名字必须匹配。这取决于您的用例和实现。有些人会认为GAP名称是固定的名称,但是广告名称更多的是一个“别名”,因为它很容易被更改。

如果希望两个名称同步,则应将间隙名称与广告名称一起更改。正确实现后,CB管理器委托将收到对-peripheralDidUpdateName的调用:如果要手动清除缓存,则需要重置iOS设备。

链接(https://forums.developer.apple.com/thread/19381)

实际上,这个方法(peripheralDidUpdateName)没有被调用。

代码语言:javascript
复制
- (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获得了更新的名称。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29203983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档