对我来说,问题出在 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]; 您所拥有的是第一次检索到的信息。如果您想刷新名称,您应该再次拨打电话。也许有一个计时器。
希望有帮助。
编辑
检查:核心蓝牙编程指南:执行常见的中心角色任务