Android与iOS的ble扫描率差异

时间:2019-06-09 15:11:23

标签: android ios bluetooth-lowenergy ibeacon rssi

我的问题是,iOS和各种Android手机从特定的ibeacon接收到BLE通告数据包的数量,例如,在特定信标的5分钟内,iOS接收到大约904个通告数据包,而android手机则接收到大约230至480之间(取决于手机)

有人知道是否存在可以设置BLE模块扫描速率的设置吗?如果不是,还有什么可能导致此问题?

我在iOS中使用“ CBCentralManager”来利用BLE模块,在Android中使用“ blutoothLeScanner”。

//Creating an instance of CBCentralManager
private let bluetoothManager = CBCentralManager(delegate: nil, queue: nil)

//Start Scanning
bluetoothManager.scanForPeripherals(withServices: nil, options: [CBCentralManagerScanOptionAllowDuplicatesKey:NSNumber(value: true)])

3 个答案:

答案 0 :(得分:1)

在两个操作系统中,扫描参数都是硬编码的,但是在Android上,您可以选择以下三种模式:

  1. https://developer.android.com/reference/android/bluetooth/le/ScanSettings.html#SCAN_MODE_BALANCED
  2. https://developer.android.com/reference/android/bluetooth/le/ScanSettings.html#SCAN_MODE_LOW_LATENCY
  3. https://developer.android.com/reference/android/bluetooth/le/ScanSettings.html#SCAN_MODE_LOW_POWER

请注意,如果您在后台扫描,则无论您选择什么,都会使用SCAN_MODE_LOW_POWER。

答案 1 :(得分:0)

Android设备模型之间存在很大的差异(通常称为碎片),这几乎适用于Bluetooth LE行为。 Android手机之间的差异比扫描速率更可能是您看到的差异的解释,扫描速率在我所见过的所有Android设备上默认为100%占空比(低延迟),类似于iOS。

在相同条件下,某些Android设备会扫描iPhone中类似数量的BLE广告(例如Pixel和更高版本的Nexus 5+设备。)但并非所有Android设备都能提供令人满意的结果。

您没有具体说说您测试过的Android机型检测到的广告检测较少,但是有很多原因可能导致这种情况:

  1. 某些较旧的Android设备(例如Nexus 4,Nexus 7和Moto G(第1代))只能在每个唯一的蓝牙设备的每次扫描中检测到广告。需要重新启动扫描以检测来自该设备的第二个数据包。您可以尝试每秒重新启动BLE扫描,看看是否有帮助。

  2. 像华为P9这样的一些Android设备的BLE天线性能很差,因此它们很少能够检测超过10米的BLE设备,而iPhone通常检测到40-50米或更长的距离。通过查看接收到的数据包的信号电平(RSSI值),可以查看这是否是导致问题的原因。 Android设备上的RSSI值是否始终较iOS弱(更负)?如果是这样,那么这可以解释差异。

答案 2 :(得分:0)

我从某些电话知道相同的行为。

请注意,您的外围设备可能会在3个BLE通道上做广告。 (?)您的Android设备可能仅在一个频道上收听。

此外,在某些情况下甚至更糟,您的手机可能一次只能在一个频道上收听,而稍后又在另一个频道上收听,因此也可能会跳频以进行扫描。您可能会获得混叠效果,并且仅看到几次广告。这就是Apple Accessory Guide建议外围设备的某些广告间隔的原因。 (第23.5章)