我们使用CC2540 BLE芯片作为外围设备,iOS 7.0.4 iPhone扮演着重要角色。
我们更改了外围设备名称,但仅当我们从iOS设备断开连接并重新连接时才会显示此更改。
在Android中使用此代码更改响应数据中的外围名称可以正常工作:
GAPRole_SetParameter( GAPROLE_SCAN_RSP_DATA, sizeof ( deviceName ), deviceName );
我们正在使用此代码更改iOS中GAP图层的外围名称:
GGS_SetParameter( GGS_DEVICE_NAME_ATT, GAP_DEVICE_NAME_LEN, attDeviceName );
有没有办法更改外围设备名称,以便不需要重新连接?
答案 0 :(得分:1)
对我来说,问题出在iOS应用程序代码中。
在iOS中连接到BLE的调用的基本顺序是:
centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil
options: nil];
这最后一个调用:
- (void) centralManagerDidUpdateState:(CBCentralManager *)central
然后如果central.state是CBCentralManagerStatePoweredOn,你可以:
[centralManager scanForPeripheralsWithServices:nil
options:nil];
这最后一个调用:
- (void) centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
Apple在此建议:“如果要对其执行任何命令,则必须保留外围设备的本地副本。”
这意味着你应该为你的CBPeripheral创建一个属性,如:
self.myPeripheral = peripheral;
在这里你有一个peripheral.name或self.myPeripheral.name
如果你的代码中没有再次调用:[centralManager scanForPeripheralsWithServices:nil options:nil];你拥有的是第一次检索到的信息。如果要刷新名称,则应再次拨打电话。也许带着计时器。
希望有所帮助。
修改
检查:Core Bluetooth Programming Guide: Performing Common Central Role Tasks
答案 1 :(得分:0)
您可以从advertisementData获取本地名称。有解决方案:Incorrect BLE Peripheral Name with iOS
在Apple Developer论坛上,以下是CBPeripheral
name
属性的详细信息。