CoreBluetooth:刷新已发现周围的本地名称(CoreBluetooth: Refreshi

2019-08-02 04:44发布

我成功地发现了一个外设,并检索其本地名称:

[advertisementData objectForKey:CBAdvertisementDataLocalNameKey]

但如果外围停止和重新启动一个不同的本地名广告客户不承认的变化。 我猜

- (void)peripheralDidUpdateName:(CBPeripheral *)peripheral

只有当两台设备配对工作。 有没有办法得到一个更新而不配对?

Answer 1:

苹果的bug。 仍然存在于iOS的6.1。 这是使用方法如何重置CB缓存:

  1. 备份设备到iCloud。
  2. 重置网络设置。
  3. 删除您的应用程序,并通过安装Xode回
  4. 在这一点上,你的周围会出现新的名称。
  5. 手动还原网络设置或者从iCloud中恢复。

抱歉。



Answer 2:

您可以在名称属性,它会甚至工作不连接时,至少这是在OS X 10.10的情况下,使用国际志愿者组织。 我只是用它来调用-peripheralDidUpdateName:通过跟踪名称字符串的方法自己,重复数据删除通话。

self.name = self.peripheral.name;
[self.peripheral addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:NULL];

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if([keyPath isEqualToString:@"name"]) {
        [self peripheralDidUpdateName:self.peripheral];
        return;
    }
    [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}


- (void)peripheralDidUpdateName:(CBPeripheral *)peripheral {
    if([peripheral.name isEqualToString:self.name]) return;
    if([self.delegate respondsToSelector:@selector(peripheralDidUpdateName:)]) {
        [self.delegate peripheralDidUpdateName:self];
    }
}


文章来源: CoreBluetooth: Refreshing local name of an already discovered Peripheral