这个问题已经在 10 月份在这里讨论过。这是一个新问题,因为 CoreBluetooth 相当新,从那时起可能已经发生了一些变化。
我每 2 秒有一个 BLE 设备广告。使用以下方式启动扫描:
[self.CM scanForPeripheralsWithServices:nil options:0]
最常返回(通过 centralManager didDiscoverPeripheral 回调)大约 2 秒到 4 秒后。(CM 是我的 CentralManger)
但是,大约 30% 的时间,扫描需要 10 到 18 秒。附近设备中的 WiFi 和 BT 已被禁用,以尽可能清除频谱。扫描时间似乎与 RSSI 无关。在 iPAd3 旁边时为 -40dB,在另一个房间约 5 米外时为 -70dB。
[self.CM stopScan];
在 scanWithPeripherals 之前调用,因为它减少了真正长时间等待的发生。
没有建立连接。未请求任何特征或服务数据。广告数据就足够了。
有一个有用的 TI演示器应用程序。这给出了类似的结果(实际上稍微差一点,因为它没有进行任何 stopScan 调用)
CBCentralManagerScanOptionAllowDuplicatesKey 选项,如在此Stackoverflow 答案中所见,如果有任何东西似乎会延长发现时间。
显然,下一步是使用一些更高级的 BT 嗅探器/广告生成工具来进一步表征这种 CoreBluetooth 响应。
这是另一个有用的SO question,但没有详细说明响应时间。