gpt4 book ai didi

ios - 更新CentralManagers外围设备的服务列表

转载 作者:行者123 更新时间:2023-12-01 16:40:22 26 4
gpt4 key购买 nike

我在iOS下的Core Bluetooth遇到问题。我正在编写OTA更新程序,遇到一个奇怪的问题。当我将设备切换到OTAU模式时,它会断开连接并在同一设备UUID下发布不同的服务,问题是,当我尝试从新连接的设备中查找服务时,会得到旧的服务列表,这些列表不再有效。问题的一个明显部分是CBPeripheral.name值是原始设备名称,但是在返回到didDiscoverPeripheral的广告词典中,它是正确的新名称。

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{
for (id key in advertisementData) {
NSLog(@"key: %@, value: %@ \n", key, [advertisementData objectForKey:key]);
}
NSLog(@"Discovered peripheral with identifer: %@, state: %d, name: %@, services: %@",
[peripheral identifier],
[peripheral state],
[peripheral name],
[peripheral services]);

if (!self.peripherals)
self.peripherals = [[NSMutableArray alloc] initWithObjects:peripheral,nil];
else
{
for(int i = 0; i < self.peripherals.count; i++)
{
CBPeripheral *p = [self.peripherals objectAtIndex:i];

if ((p.identifier == NULL) || (peripheral.identifier == NULL))
continue;

if ([self UUIDSAreEqual:p.identifier UUID2:peripheral.identifier])
{
[self.peripherals replaceObjectAtIndex:i withObject:peripheral];
NSLog(@"Duplicate UUID found updating...");
return;
}
}
peripheral.delegate = self;
[self.peripherals addObject:peripheral];

NSLog(@"New UUID, adding");
}
}

这是我回想的内容:
  key: kCBAdvDataChannel, value: 38 
key: kCBAdvDataLocalName, value: Xxxx1000_boot
key: kCBAdvDataIsConnectable, value: 1
Discovered peripheral with identifer: <__NSConcreteUUID 0x156787d0> 9E7A4F82-29F2-08EF-F6A5-9ADCC0790B7F, state: 0, name: Xxxx1000, services: (null)

通常,对于程序的下一次全新运行,它将以相反的方式显示,外设名称为Xxxx_boot,广告名称为Xxxx(广告始终正确)。

我不知道有什么方法可以清除保存在CBCentralManager中的外围设备信息,我什至尝试创建CentralManager的新实例,但似乎无济于事。有任何想法吗?

最佳答案

广告实际上只是一个提示。它几乎可以包含从“鞋子大小”到托管服务的任何内容。只需看看iBeacon profile即可。您永远不应完全依赖此数据,Core Bluetooth也不会以任何其他方式使用此信息。

外设名称是从外设上的相应特性加载的。一旦iOS读取了它,它将在CBPeripheral.name属性中使用,并且所宣传的名称将被忽略。重新连接后,名称将自动刷新。

结论,

  • 在连接之前不要判断,广告可能会撒谎,Core Bluetooth会谨慎使用它
  • 总是在连接
  • 后发现服务
  • 介意peripheralDidUpdateName:回调
  • 关于ios - 更新CentralManagers外围设备的服务列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24942938/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com