我们想在android 4.3上开发ibeacon函数。为了提高准确性,我们将外围设备的广告率提高到50Hz。但是“ LeScanCallback”每秒仅被调用3到5。但是,“ didDiscoverPeripheral”在iPhone上的调用速度可以高达每秒100次。
我尝试每500ms,400ms,300ms重新启动“ startLeScan”。增加是有限的。
当我将外围设备的广告速率设置为10Hz时。调用“ LeScanCallback”的速率降至每秒1到3。
有什么建议吗?
如果我编写一个JNI代码来像ble驱动程序一样直接调用低级api,会更好吗?
最佳答案
这可能是特定于设备的问题。我在Nexus和Samsung设备上进行了许多类似的测试,信标以20 Hz的频率传输,通常看到大约80%的数据包在Android设备上被检测到。 (平均LeScanCallback每秒被调用16次。)
某些设备(例如Nexus 4,Moto G)具有芯片组,每个唯一扫描的蓝牙mac地址仅返回一个广告包,直到您停止并重新开始扫描为止。
我怀疑较低级别的代码是否会有所帮助。在采取这一步骤之前,我将尝试使用其他设备。