hug*_*gie 7 ios core-bluetooth bluetooth-lowenergy
我目前正在iOS 7上运行.看来在扫描期间检索到的BLE外围设备名称是根据地址缓存的.即使使用新值刷新BLE设备的名称,在iOS 7的外围设备发现期间,[myCentralManager scanForPeripheralsWithServices:nil options:nil];我在刷新之前获得旧设备名称.
我会推荐最有效和最暴力的解决方案之一,我的方法奏效了!!!
重置你的IPHONE
设置 --> 通用 --> 删除所有内容和设置
之后再次扫描。有效。
另一种方式:
现在让我告诉你解决问题的正确方法:
有2个名字需要考虑。广告名称和 GAP(通用访问配置文件)名称。
对于 iOS 以前从未连接过的外围设备,报告的 'name' 属性是广告名称。连接后,GAP 名称将被缓存,并报告为外设的名称。由于广告名称的大小限制,GAP 名称被认为是“更好”的名称。
没有规则说两个名字必须匹配。这取决于您的用例和实现。有些人会认为 GAP 名称是固定名称,但广告名称更像是一个“别名”,因为它很容易更改。
如果您希望两个名称同步,您应该同时更改 GAP 名称和广告名称。正确实施后,您的 CB 管理器委托将收到对 -peripheralDidUpdateName: 的调用:如果您想手动清除缓存,则需要重置 iOS 设备。
链接(https://forums.developer.apple.com/thread/19381)
其实这个方法(peripheralDidUpdateName)并没有被调用
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<NSString *,id> *)advertisementData RSSI:(NSNumber *)RSSI {
NSString * gapName = peripheral.name;
NSString * identityName = [advertisementData objectForKey:CBAdvertisementDataLocalNameKey];
}
Run Code Online (Sandbox Code Playgroud)
使用 [advertisementData objectForKey:CBAdvertisementDataLocalNameKey] 获取外设名称比使用peripheral.name 更精确
因为peripheral.name 获取GAP 名称但[advertisementData objectForKey:CBAdvertisementDataLocalNameKey] 获取更新的名称。
| 归档时间: |
|
| 查看次数: |
6162 次 |
| 最近记录: |