我有一个能够更新其广告名称的蓝牙设备。然后我使用此代码在我的应用程序中读取新名称:
NSString *localName = [advertisementData objectForKey:CBAdvertisementDataLocalNameKey];
当我这样做时,变量localName
则包含更新的名称。但是当调用此函数时:
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
peripheral.name
保留旧名称。我尝试了几个方法来获取新名称(例如我尝试重置蓝牙设备,重置我的iPad,卸载/重新安装我的应用程序),但这些都没有奏效。在我独自离开几个小时后,我回来了peripheral.name
最后更新,以反映localName
中的价值。
我想也许有一种方法可以让蓝牙设备宣传一个名字然后再报告,但我发现了一个让我确信问题出在iOS应用程序中的情景。蓝牙设备广告为"名称A"。我用iPod和iPad发现了这个设备。这两种设备都看到了#34;名称A"。我将设备的名称更新为"名称B"。我用我的iPod发现了这个设备,它仍然将设备报告为"名称A"。一段时间后,它最终更新为"名称B"。我将设备的名称更改为"名称C"。 iPod正在报道"名称B"并且iPad仍在报告"名称A"。
有没有人见过这个问题?有没有办法刷新CBPeripheral.name
值?
(编辑:我刚刚注意到iPad开始报告"名称C"我第一次连接到设备后。有没有办法在连接之前更新名称?)