iOS CoreBluetooth

iOS BLE外设名称更新后不正确的原因

2018-11-28  本文已影响0人  淇则有岸_1fb5

笔者最近在做一个BLE相关的项目开发过程中遇到这样一个问题,当一个外设(peripheral)已经连接与ipad连接成功后,如果修改外设的名称,ipad扫描外设后获得的仍然是之前的名称,新名称不知所踪。检查代码后,我发现我的代码并没有问题,打印出个的perpheral.name依然是以前的值,

解决方法

APP当作蓝牙中心,连接其他的蓝牙外设时,首次连接成功过后,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
} 
  func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
        let localName = advertisementData["kCBAdvDataLocalName"]
        //you to do
    }

Note

上一篇下一篇

猜你喜欢

热点阅读