iOS 蓝牙BLE外设名称修改后不更新的解决方案

最近做一个BLE相关的项目,遇到一个问题。

现象:

当一个外设(peripheral)已经与iPhone连接成功后,如果修改外设的名称,iPhone重新扫描外设后获得的仍然是之前的名称。打印的perpheral.name依然是以前的值。

解决方法:

首次连接成功过后,iOS系统内会将改外设缓存记录下来,下次重新搜索时,搜索到的蓝牙外设时,直接打印peripheral.name,得到的是之前缓存中的蓝牙名称,如果此期间蓝牙外设有更新蓝牙名称的话,这个参数并不会改变,所以需要换一种方式获取蓝牙外设的名称,广播数据包内就有一个字段kCBAdvDataLocalName,可以从中获取。

代码:

-(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<NSString *,id> *)advertisementData RSSI:(NSNumber *)RSSI{
        NSString *localName = [advertisementData objectForKey:@"kCBAdvDataLocalName"];
        //you to do
} 

Note:

这里有两个Name需要注意,一个是GAP name,一个是一个 advertising name,设备没有连接外设时,获取的perpheral.name会是advertising name,然后当设备第一次连接成功外设后,GAP name就会被缓存下来,以后在连接时,获取的也都是GAP Name, 这样就造成了修改名称后苹果设备不更新的问题,指的一提的是,苹果并不要求着两个名字相同, 所以除了上文提到的直接获取广告名字外,也可以让硬件工程师直接修改GAP name.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值