I'm recently working on a indoor positioning project based on BLE beacons.
I had been try to include Estimote or Android Beacon Library to my Android app, but my devices (Zenfone3, HTC X9) can only scanned about 10-20 beacons in a space which we had been deployed about 100 beacons on the wall.
In contrast to the iOS version of our app, it can scanned about 50-80 beacons every seconds. I am wondering how many beacons can be scanned on Android devices? And does there have any method to receive more beacon advertisement? It there really have a threshold on the Bluetooth API of Android or onbroad Bluetooth chipset?
I've assure that all the beacons are functioning. I used "Locate" from Radius Network to scan nearby beacons and make sure that I really got 50+ beacons in my space.
Dear Emil, thank your for your sincere reply. The following is my workarounds. I've test 3 cases. In a space about 500m x 100m, I deployed different numbers of beacons:
case 1 (100 beacons): receive advertisements from about 16 different devices in every second.
case 2 (50 beacons): receive advertisements from about 15 different devices in every second.
case 3 (20 beacons): receive advertisements from about 14 different devices in every second.
what I want to achieve is that I want to receive advertisements from all devices in every second. Would your please provide any approaches to fulfill my needs?
The following is the log I get whenever I receive a advertisement from ScanResult from BluetoothAdapter.getBluetoothLeScanner().startScan(ScanCallback):
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
There is impossible to receive 100% of the advertisement packets if you have 100 advertising devices with 100 ms advertisement interval. First the android device will not really scan 100% of the time, even if you use the 100% duty scan interval, since it at some points in time must use the antenna for something else, like wifi or scheduling other devices' connection events. If you say you advertise only on channel 39 you will lose about a third of all packets because the scanner cycles between the advertisement channels. You will also most likely have colliding advertisements on the air, since it takes some hundreds of microseconds to send a packet. The receiver will most likely just receive garbage when that happens.