1

我们使用 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 );

有什么方法可以更改外围设备名称以便不需要重新连接?

4

2 回答 2

1

对我来说,问题出在 iOS App 代码中。

在 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

苹果在此建议:“如果要对其执行任何命令,您必须保留外围设备的本地副本。”

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

self.myPeripheral = 外围设备;

在这里你有一个 peripheral.name 或 self.myPeripheral.name

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

希望有帮助。

编辑

检查:核心蓝牙编程指南:执行常见的中心角色任务

于 2014-03-19T17:38:53.273 回答
1

您可以从广告数据中获取本地名称。有解决方案:不正确的 BLE Peripheral Name with iOS

在 Apple Developer Forums 上,这里是CBPeripheral name属性的详细信息。

于 2016-04-06T04:43:04.643 回答