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.

你可能感兴趣的:(iOS,iphone,ios,蓝牙)