我已经回顾了StackOverflow上的类似问题,但是由于接收到扫描响应数据,它们都处理了对CBManager委托的didDiscover方法的第二次调用。我的情况不同。
我坐在家里的办公桌前。我的应用程序运行在iPhone 6,iOS 10.2上。我的应用程序开始扫描而不指定任何服务uuids(即发现所有外围设备)。我的应用程序无法连接到任何已发现的外围设备。正在发现五种不同的外围设备,其中包括我的开发MacBook Pro,它通过USB / Lightening电缆连接到iPhone。
我的应用程序在MacBook Pro方面表现得很奇怪。一次又一次地为MacBook Pro调用didDiscover方法。最后它停止了;直到我移动MacBook Pro的光标或点击键盘上的一个键;然后它再次开始。其他四个外围设备不会出现这种情况,其中包括两部苹果电视。
这是我的didDiscover方法:
@objc func centralManager(_ manager: CBCentralManager, didDiscover cbPeripheral: CBPeripheral, advertisementData data: [String : Any], rssi signalStrength: NSNumber) {
NSLog("Peripheral discovered: \(cbPeripheral)")
}
以下是来自控制台的示例:
我不知道怎么想这个。我无法想出任何我可能尝试或检查的内容,以揭示有关正在发生的事情的更多信息。任何想法将不胜感激。
更新1:
首先是一些额外的信息:
但是,正如CuriousRabbit指出的那样,那么呢?好吧,鉴于这种行为不是我的一些疏忽的结果,我剩下的是:我如何编码?目前,我的最佳镜头是:
这对你们这些人来说是否正确?
而且,如果从这里学到的经验是期望在外围设备发送广告包的时候调用didDiscover(重要的是CuriousRabbit"你的MacBook正在广告宣传"评论),那为什么我没有看到其他四个外围设备的这种行为?
答案 0 :(得分:0)
对于指定CBCentralManagerScanOptionAllowDuplicatesKey 的情况,Apple documentation(请参阅“仅在必要时指定CBCentralManagerScanOptionAllowDuplicatesKey选项”部分)指出将重复调用didDiscoverPeripheral方法每当广告数据发生变化时。
我观察到的是,如果信号强度(rssi)发生变化,也会发生重复调用。对于MacBook Pro,rssi值正在反弹(尽管有时会有两个背对背的日志声明,其中它不会改变,但一般情况下它正在改变)。广告数据永远不会改变。也;在极少数情况下,对于其他一个外设重复disDiscoverPeripheral时,rssi值已经改变。
我非常自信rssi的变化可以解释我所看到的行为。