这个问题已在10月份here进行了讨论。这是一个新问题,因为CoreBluetooth相当新,从那以后可能会发生一些变化。
我每2秒就有一个BLE设备广告。使用以下命令启动扫描:
[self.CM scanForPeripheralsWithServices:nil options:0]
最常返回(通过centralManager didDiscoverPeripheral回调)大约2s到4s之后。 (CM是我的CentralManger)
然而,大约30%的时间,扫描需要10到18秒。 已禁用附近设备中的WiFi和BT以尽可能清除频谱。 扫描时间似乎与RSSI无关。在iPAd3旁边是-40dB,在另一个房间大约5米远的地方是-70dB。
[self.CM stopScan];
在scanWithPeripherals之前调用,因为它减少了真正长时间等待的发生。
没有连接。没有要求提供任何特征或服务数据。广告数据就足够了。
有一个有用的TI demonstrator app。 这给出了类似的结果(实际上稍微差一点,因为它没有进行任何stopScan调用)
CBCentralManagerScanOptionAllowDuplicatesKey选项如此Stackoverflow answer中所示,如果有任何事情似乎延长了发现时间。
显然,下一步是使用一些更先进的BT嗅探器/广告生成工具来进一步表征这个CoreBluetooth响应。
这是另一个有用的SO question,但没有详细说明响应时间。
答案 0 :(得分:10)
CoreBluetooth没有连续收听。它与蓝牙经典和Wifi共享硬件资源。
基本上你必须“幸运”才能收到广告包。 “幸运”,因为2个非同步系统的2个滑动窗口必须相互碰撞。 如果CoreBluetooth在10%的时间打开它的BLE窗口并且您已经设置了广告间隔而不知道确切的时间,那么它将/可能需要10倍的广告间隔。
一个建议是广告>快速<对于前30秒(比如20ms,您应该在第一个活动的CoreBluetooth窗口中发现它),然后减慢到Apple指定的间隔。 2,00秒不是一个好数字。
请参阅此处的指南: https://developer.apple.com/hardwaredrivers/BluetoothDesignGuidelines.pdf
第18页
广告时段 应仔细考虑蓝牙配件的广告时间间隔,因为它会影响时间 发现和连接性能。对于电池供电的配件,其电池资源也应该是 考虑。 要由Apple产品发现,蓝牙配件应首先使用推荐的广告 间隔为20毫秒,至少30秒。如果在最初的30秒内未发现,则附件可以 选择节省电池电量并增加其广告间隔。 Apple建议使用以下其中一项 更长的间隔,以增加Apple产品发现的机会:
645毫秒 768毫秒 961毫秒 1065毫秒 1294毫秒
如果必须节省电池,请尝试1294 ms。