Ios 为什么CoreBooth一次又一次地发现同一个外设?
我已经回顾了有关StackOverflow的类似问题,但它们都涉及到在收到扫描响应数据后对CBManager代表的didDiscover方法的第二次调用。我的情况不同 我坐在家里的书桌旁。我的应用程序运行在iPhone 6、iOS 10.2上。我的应用程序在不指定任何服务UUID的情况下启动扫描(即发现所有外围设备)。我的应用程序未连接到发现的任何外围设备。发现了五种不同的外围设备,其中包括我的开发MacBook Pro,它通过USB/照明电缆连接到iPhone 我的应用程序在MacBookPro上表现得很奇怪。MacBookPro一次又一次、一秒又一秒地调用didDiscover方法。最后它停止了;直到我移动MacBook Pro的光标或轻触键盘上的某个键;然后它又开始了。其他四个外围设备没有出现这种情况,其中包括两台苹果电视 以下是我的didDiscover方法:Ios 为什么CoreBooth一次又一次地发现同一个外设?,ios,core-bluetooth,Ios,Core Bluetooth,我已经回顾了有关StackOverflow的类似问题,但它们都涉及到在收到扫描响应数据后对CBManager代表的didDiscover方法的第二次调用。我的情况不同 我坐在家里的书桌旁。我的应用程序运行在iPhone 6、iOS 10.2上。我的应用程序在不指定任何服务UUID的情况下启动扫描(即发现所有外围设备)。我的应用程序未连接到发现的任何外围设备。发现了五种不同的外围设备,其中包括我的开发MacBook Pro,它通过USB/照明电缆连接到iPhone 我的应用程序在MacBookPr
@objc func centralManager(_ manager: CBCentralManager, didDiscover cbPeripheral: CBPeripheral, advertisementData data: [String : Any], rssi signalStrength: NSNumber) {
NSLog("Peripheral discovered: \(cbPeripheral)")
}
以下是控制台中的示例:
我不知道该怎么想。我想不出任何我可能会尝试或检查的东西来揭示更多关于正在发生的事情的信息。任何想法都将不胜感激
更新1:
首先是一些补充信息:
而且,如果这里学到的经验是,每当外设发送广告包时(re CuriousRabbit的“您的MacBook正在积极地进行广告宣传”评论),都会调用didDiscover,那么为什么我看不到其他四个外设的这种行为呢 对于未指定CBCentralManagerScanOptionAllowDuplicatesKey的情况,则(请参阅“仅在必要时指定CBCentralManagerScanOptionAllowDuplicatesKey选项”部分)指出,只要广告数据发生更改,就会重复调用DidDiscoveryPeripheral方法 我所观察到的是,如果信号强度(rssi)发生变化,也会发生重复呼叫。对于MacBook Pro,rssi值正在反弹(尽管有时有两个背对背的日志语句,其中rssi值没有变化,但通常是变化的)。广告数据永远不会改变。也;在为其他某个外围设备重复DisDiscoveryPeripheral的罕见情况下,rssi值发生了变化
我很有信心rssi的变化可以解释我所看到的行为。因为你的MacBook一直在用BLE“我在这里”(广告)表示。CBCentralManager“并不总是跟踪”设备,它只是通过触发委托方法didDiscoverDevice来响应广告。我猜你在扫描方法中设置了允许重复键?它不断发现你的Mac电脑,因为它在广告中很有攻击性?为什么这很重要?这里的问题是什么?@Larme我将scanForPeripherals方法的选项参数的值传递为零。@CuriousRabbit好的,我经常看到它,因为MacBook经常做广告。那么,为什么我从来没有在其他外围设备上看到它?尽管如此,我理解你——那又怎样?我要更新我的问题。@Verticon-我不知道为什么其他外设不经常出现。我猜MacBook在功能上并不保守,广告频率也很高,但由于缺乏理解,我不会再作进一步推测。