iOS蓝牙设备名称缓存问题的解决方法
1. 问题背景
- 当设备已经在 App 中连接成功后
- 修改设备名称
- App 扫描到的设备名称仍然是之前的名称
- App 代码中获取名称的方式为(perpheral.name)
2. 问题分析
当 APP 为中心连接其他的蓝牙设备时。
首次连接成功过后,iOS系统内会将该外设缓存记录下来。
下次重新搜索时,搜索到的蓝牙设备时,直接打印 (peripheral.name),得到的是之前缓存中的蓝牙名称。
如果此期间蓝牙设备更新了名称,(peripheral.name)这个参数并不会改变,所以需要换一种方式获取设备的名称,在广播数据包内有一个字段为 kCBAdvDataLocalName,可以实时获取当前设备名称。
3. 问题解决
下面给出OC 和 Swift 的解决方法:
OC
-(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<NSString *,id> *)advertisementData RSSI:(NSNumber *)RSSI{ NSString *localName = [advertisementData objectForKey:@"kCBAdvDataLocalName"]; }
Swift
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) { let localName = advertisementData["kCBAdvDataLocalName"] }
总结
到此这篇关于iOS蓝牙设备名称缓存问题的解决方法的文章就介绍到这了,更多相关iOS蓝牙设备名称缓存内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
iOS DispatchSourceTimer 定时器的具体使用
定时器在很多地方都可以用到,本文主要介绍了iOS DispatchSourceTimer 定时器的具体使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2022-05-05iOS中navigationController 去掉背景图片、去掉底部线条的核心代码
本文给大家带来了iOS中navigationController 去掉背景图片、去掉底部线条的核心代码,有需要的朋友可以参考下2016-08-08
最新评论