iOS蓝牙修改设备名后没有修改的问题

现在做了一个项目,需要用蓝牙对接硬件。有一个需求就是修改设备名字。然后我就很开心的发指令修改。然后写入数据成功后,但是蓝牙设备名一直没有变。这就然我感到很诧异,难道是我的指令发送错了吗?接下来就是漫长的研究。

以下代码的前提是我已经把设备名字“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了
好了,到此已经解决设备名不显示修改后的名称了,大家加油

发布了12 篇原创文章 · 获赞 12 · 访问量 545

猜你喜欢

转载自blog.csdn.net/qq_33463449/article/details/91489726
今日推荐