iOS不会检测新的外围设备名称

时间:2014-03-19 16:49:31

标签: 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图层的外围名称:

GGS_SetParameter( GGS_DEVICE_NAME_ATT, GAP_DEVICE_NAME_LEN, attDeviceName );

有没有办法更改外围设备名称,以便不需要重新连接?

2 个答案:

答案 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属性的详细信息。