iOS未检测到新的外围设备名称

iOS未检测到新的外围设备名称,ios,ios7,bluetooth-lowenergy,cbperipheral,Ios,Ios7,Bluetooth Lowenergy,Cbperipheral,我们使用CC2540 BLE芯片作为外围设备,iOS 7.0.4 iPhone发挥着核心作用 我们更改了外设名称,但此更改仅在断开与iOS设备的连接并重新连接时显示 在Android中,使用以下代码更改响应数据中的外设名称可以正常工作: GAPRole_SetParameter( GAPROLE_SCAN_RSP_DATA, sizeof ( deviceName ), deviceName ); 我们正在使用此代码更改iOS中GAP layer的外围设备名称: GGS_SetParamete

我们使用CC2540 BLE芯片作为外围设备,iOS 7.0.4 iPhone发挥着核心作用

我们更改了外设名称,但此更改仅在断开与iOS设备的连接并重新连接时显示

在Android中,使用以下代码更改响应数据中的外设名称可以正常工作:

GAPRole_SetParameter( GAPROLE_SCAN_RSP_DATA, sizeof ( deviceName ), deviceName );
我们正在使用此代码更改iOS中GAP layer的外围设备名称:

GGS_SetParameter( GGS_DEVICE_NAME_ATT, GAP_DEVICE_NAME_LEN, attDeviceName );

有没有办法更改外设名称,这样就不需要重新连接

对我来说,问题在于iOS应用程序代码

在iOS中连接到BLE的呼叫的基本顺序是:

centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil
                                                    options: nil];
最后一个调用:

- (void) centralManagerDidUpdateState:(CBCentralManager *)central
- (void) centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
然后,如果central.state是CBCentralManagerStatePowerOn,则可以:

[centralManager scanForPeripheralsWithServices:nil 
                                       options:nil];
最后一个调用:

- (void) centralManagerDidUpdateState:(CBCentralManager *)central
- (void) centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
苹果在此建议:“如果要在外设上执行任何命令,必须保留外设的本地副本。”

这意味着您应该为您的设备创建一个属性,如:

self.myperipal=外围设备

在这里您可以使用peripal.name或self.myperipal.name

如果您不在代码中再次调用:[centralManager scanForPeripheralsWithServices:nil options:nil];您拥有的是第一次检索到的信息。如果要刷新名称,应再次拨打电话。也许有计时器

希望有帮助

编辑


选中:

您可以从advertisementData获取本地名称。有一个解决方案:


在苹果开发者论坛上,这里是
cbperipal
name
属性的详细信息。

请澄清您的问题。谁在扮演中心角色,谁在扮演外围角色?另一个问题。您使用什么来测试iOS、您自己的代码或appstore中的某个BLE应用程序?@Gabriel.masana抱歉,我编辑了我的问题。我们已经用自己的代码和LightBlue应用程序进行了测试。我想LightBlue在第一个表中也使用了peripal.name属性。@Gabriel.masana。不知何故,它很有用,因为我已经检查过,即使移除所有外围设备并再次扫描,我仍然保留旧的外围设备名称。我投你的赞成票。但是,我仍然无法从peripheral.name获取新名称。我已设法从advertisementData:NSObject*localName=[advertisementData objectForKey:CBAdvertisementDataLocalNameKey]获取它;谢谢你的回复。我已经删除了所有外设,然后再次扫描外设,旧名称仍然存在。那么这是外设中的一个问题。外围设备正在填充是一个问题。我想我会尝试从advertisementData获取名称。Apple开发者论坛链接: