在 Android 台设备上可以扫描多少个信标?

How many beacons can be scanned on Android devices?

我最近在做一个基于 BLE 信标的室内定位项目。

我曾尝试将 Estimote 或 Android Beacon Library 添加到我的 Android 应用程序中,但我的设备(Zenfone3、HTC X9)只能扫描大约 10-20 个信标 space 我们已经在墙上部署了大约 100 个信标。

与我们应用程序的 iOS 版本相比,它每秒可以扫描大约 50-80 个信标。我想知道在 Android 台设备上可以扫描多少个信标?有什么方法可以接收更多的信标广告吗? Android 的蓝牙API 或onbroad 蓝牙芯片组真的有门槛吗?


更新(2017/05/08 16:17):

我已确认所有信标都在运行。我使用 Radius Network 的 "Locate" 扫描附近的信标,并确保我的 space 中确实有 50 多个信标。


更新(2017/05/10 10:00):

亲爱的埃米尔,感谢您真诚的回复。以下是我的解决方法。 我测试了3个案例。在 space 大约 500m x 100m 中,我部署了不同数量的信标:

案例 1(100 个信标): 每秒接收来自大约 16 个不同设备的广告。

案例 2(50 个信标): 每秒接收来自大约 15 个不同设备的广告。

案例 3(20 个信标): 每秒接收来自大约 14 个不同设备的广告。

我想实现的是每一秒都收到来自所有设备的广告。能否请您提供任何方法来满足我的需求?

以下是每当我从 BluetoothAdapter.getBluetoothLeScanner().startScan(ScanCallback):

收到来自 ScanResult 的广告时得到的日志
05-04 12:42:24.460 C4:BE:7B:5B:60:74 -87
05-04 12:42:25.055 C4:BE:C8:F6:DD:28 -84
05-04 12:42:25.066 C4:BE:C8:F6:DD:28 -84
05-04 12:42:25.075 C4:BE:5F:55:74:AE -90
05-04 12:42:25.084 C4:BE:5F:55:74:AE -90
05-04 12:42:25.090 C4:BE:14:70:C7:F1 -91
05-04 12:42:25.100 C4:BE:14:70:C7:F1 -91
05-04 12:42:25.134 C4:BE:BB:AD:8A:B3 -91
05-04 12:42:25.163 C4:BE:BB:AD:8A:B3 -91
05-04 12:42:25.169 C4:BE:D7:80:E1:34 -89
05-04 12:42:25.174 C4:BE:D7:80:E1:34 -89
05-04 12:42:25.536 C4:BE:5D:90:5C:86 -79
05-04 12:42:25.543 C4:BE:5D:90:5C:86 -79
05-04 12:42:25.559 C4:BE:20:20:C9:69 -88
05-04 12:42:25.564 C4:BE:20:20:C9:69 -88
05-04 12:42:25.986 C4:BE:C1:D9:CB:5E -86
05-04 12:42:25.999 C4:BE:C1:D9:CB:5E -86
05-04 12:42:26.007 C4:BE:CD:AA:AE:DD -94
05-04 12:42:26.016 C4:BE:CD:AA:AE:DD -94
05-04 12:42:26.038 C4:BE:E7:F1:88:EE -89
05-04 12:42:26.044 C4:BE:E7:F1:88:EE -89
05-04 12:42:26.051 C4:BE:E9:AE:45:03 -83
05-04 12:42:26.056 C4:BE:E9:AE:45:03 -83
05-04 12:42:26.063 C4:BE:97:5D:B7:50 -95
05-04 12:42:26.071 C4:BE:97:5D:B7:50 -95
05-04 12:42:26.076 C4:BE:EF:15:EB:C3 -77
05-04 12:42:26.082 C4:BE:EF:15:EB:C3 -77
05-04 12:42:26.086 C4:BE:35:94:B2:3D -70
05-04 12:42:26.092 C4:BE:35:94:B2:3D -70
05-04 12:42:26.644 C4:BE:5F:55:74:AE -92
05-04 12:42:26.667 C4:BE:5F:55:74:AE -92
05-04 12:42:26.693 C4:BE:7B:5B:60:74 -86
05-04 12:42:26.702 C4:BE:7B:5B:60:74 -86
05-04 12:42:26.708 C4:BE:D7:80:E1:34 -82
05-04 12:42:26.717 C4:BE:D7:80:E1:34 -82
05-04 12:42:26.720 C4:BE:3B:29:8A:42 -93
05-04 12:42:26.724 C4:BE:3B:29:8A:42 -93
05-04 12:42:26.731 C4:BE:4F:21:CF:81 -94
05-04 12:42:26.734 C4:BE:4F:21:CF:81 -94
05-04 12:42:26.738 C4:BE:86:4F:C2:8D -87
05-04 12:42:26.742 C4:BE:86:4F:C2:8D -87
05-04 12:42:26.746 C4:BE:E7:F1:88:EE -88
05-04 12:42:26.750 C4:BE:E7:F1:88:EE -88
05-04 12:42:26.753 C4:BE:20:20:C9:69 -86
05-04 12:42:26.757 C4:BE:20:20:C9:69 -86
05-04 12:42:26.760 C4:BE:BB:AD:8A:B3 -88
05-04 12:42:26.763 C4:BE:5D:90:5C:86 -79
05-04 12:42:26.767 C4:BE:BB:AD:8A:B3 -88
05-04 12:42:26.770 C4:BE:5D:90:5C:86 -79
05-04 12:42:27.113 C4:BE:6F:53:2A:B3 -73
05-04 12:42:27.133 C4:BE:6F:53:2A:B3 -73
05-04 12:42:27.151 C4:BE:62:C4:68:38 -82
05-04 12:42:27.160 C4:BE:62:C4:68:38 -82
05-04 12:42:27.166 C4:BE:F2:A7:4F:4E -88
05-04 12:42:27.170 C4:BE:F2:A7:4F:4E -88

应该没有任何限制。 Android 的蓝牙堆栈只是将广告和扫描响应转发给应用程序。我们有数百种广告设备,但仍然可以正常工作。

是否有特定设备的广告根本不起作用,可能是由于数据包格式或其他原因?

如果您有 100 台广告设备,广告间隔为 100 毫秒,则不可能收到 100% 的广告数据包。首先,android 设备不会真正扫描 100% 的时间,即使您使用 100% 的任务扫描间隔,因为它在某些时间点必须将天线用于其他用途,例如 wifi 或调度其他设备' 连接事件。如果你说你只在通道 39 上做广告,你将丢失大约三分之一的数据包,因为扫描器在广告通道之间循环。您也很可能会在广播中看到冲突的广告,因为发送一个数据包需要数百微秒。发生这种情况时,接收方很可能只会收到垃圾。