我的问题是,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)])
答案 0 :(得分:1)
在两个操作系统中,扫描参数都是硬编码的,但是在Android上,您可以选择以下三种模式:
请注意,如果您在后台扫描,则无论您选择什么,都会使用SCAN_MODE_LOW_POWER。
答案 1 :(得分:0)
Android设备模型之间存在很大的差异(通常称为碎片),这几乎适用于Bluetooth LE行为。 Android手机之间的差异比扫描速率更可能是您看到的差异的解释,扫描速率在我所见过的所有Android设备上默认为100%占空比(低延迟),类似于iOS。
在相同条件下,某些Android设备会扫描iPhone中类似数量的BLE广告(例如Pixel和更高版本的Nexus 5+设备。)但并非所有Android设备都能提供令人满意的结果。
您没有具体说说您测试过的Android机型检测到的广告检测较少,但是有很多原因可能导致这种情况:
某些较旧的Android设备(例如Nexus 4,Nexus 7和Moto G(第1代))只能在每个唯一的蓝牙设备的每次扫描中检测到广告。需要重新启动扫描以检测来自该设备的第二个数据包。您可以尝试每秒重新启动BLE扫描,看看是否有帮助。
像华为P9这样的一些Android设备的BLE天线性能很差,因此它们很少能够检测超过10米的BLE设备,而iPhone通常检测到40-50米或更长的距离。通过查看接收到的数据包的信号电平(RSSI值),可以查看这是否是导致问题的原因。 Android设备上的RSSI值是否始终较iOS弱(更负)?如果是这样,那么这可以解释差异。
答案 2 :(得分:0)
我从某些电话知道相同的行为。
请注意,您的外围设备可能会在3个BLE通道上做广告。 (?)您的Android设备可能仅在一个频道上收听。
此外,在某些情况下甚至更糟,您的手机可能一次只能在一个频道上收听,而稍后又在另一个频道上收听,因此也可能会跳频以进行扫描。您可能会获得混叠效果,并且仅看到几次广告。这就是Apple Accessory Guide建议外围设备的某些广告间隔的原因。 (第23.5章)