I am working on an app that has to measure the distance to an iBeacon. When a user is within a distance (1 meter) the user should be notified.
It is working fine on iOS but on Android I get various results. I am using the Estimote Android SDK (https://github.com/Estimote/Android-SDK) and Android 4.3.
Below is measurement from a Nexus 4 and a Nexus 5. The iBeacon is placed one meter away from the phone (the measurements are consistent with more samples):
Nexus 4:
08-25 11:39:04.788: : Major: 27485 Accuracy: 0.36351308115918884 Power: -74 Rssi: -67
08-25 11:39:05.880: : Major: 27485 Accuracy: 0.31923897946172497 Power: -74 Rssi: -66
08-25 11:39:06.911: : Major: 27485 Accuracy: 0.31923897946172497 Power: -74 Rssi: -66
08-25 11:39:07.962: : Major: 27485 Accuracy: 0.41856988869951295 Power: -74 Rssi: -68
08-25 11:39:09.003: : Major: 27485 Accuracy: 0.31923897946172497 Power: -74 Rssi: -66
Nexus 5:
08-25 11:35:31.443: : Major: 27485 Accuracy: 0.14058401218665711 Power: -74 Rssi: -61
08-25 11:35:32.483: : Major: 27485 Accuracy: 0.14058401218665711 Power: -74 Rssi: -61
08-25 11:35:33.513: : Major: 27485 Accuracy: 0.17333602268971005 Power: -74 Rssi: -62
08-25 11:35:34.553: : Major: 27485 Accuracy: 0.17333602268971005 Power: -74 Rssi: -62
08-25 11:35:35.593: : Major: 27485 Accuracy: 0.17333602268971005 Power: -74 Rssi: -62
As noted none of them is close to one meter. The Nexus 4 has the closest result with 0.42 meters. The Accuracy is taken from Utils.computeAccuracy in the Estimote SDK.
The big problem is that different devices gives different results. Most devices I tried (Nexus 4, Nexus 7, HTC One Mine) gives results similar to Nexus 4. However the Nexus 5 indicates to be much closer than other devices.
Is there a way to make all devices give (close to) similar results? Alternative a way to know how different devices measure (so an algorithm can compensate for different results)
Also has anyone found a way to enhance the sampling rate on Android Bluetooth LE?
I really would like to prevent using some calibration when the user starts up the app.
I have to use iBeacons (customer demand) but another Library could be an option if this would help solving the problem.