现在做了一个项目,需要用蓝牙对接硬件。有一个需求就是修改设备名字。然后我就很开心的发指令修改。然后写入数据成功后,但是蓝牙设备名一直没有变。这就然我感到很诧异,难道是我的指令发送错了吗?接下来就是漫长的研究。
以下代码的前提是我已经把设备名字“147”改成了“369”
#pragma mark - 扫描设备,发现设备的回调
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)args_peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI{
//如果直接获取设备的名称,这时会可能获取不到修改后的设备名
NSLog(@"发现设备:%@",args_peripheral.name)
}
打印结果:
如上图可以看到设备名字还是147
这是为什么呢,经过研究发现,蓝牙扫描设备是有缓存的,蓝牙发现设备后,会缓存一下。这就造成了修改后的设备名称没有修改,实际上是设备名称已经修改了,实际上扫描设备已经修改了名字
那这怎么获取修改后的名字呢,其实需要用到 kCBAdvDataLocalName键值来获取设备名而不是直接获取args_peripheral.name这种方式获取。修改代码如下
#pragma mark - 扫描设备,发现设备的回调
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)args_peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI{
//如果直接获取设备的名称,这时会可能获取不到修改后的设备名
NSLog(@"发现设备:%@",args_peripheral.name)
//通过下边方式获取设备名
NSString *nameStr = [advertisementData objectForKey:@"kCBAdvDataLocalName"];
NSLog(@"*********************** %@",nameStr);
}
打印结果
可以看到下边已经变成369了
好了,到此已经解决设备名不显示修改后的名称了,大家加油