Indoor Location Android experiences


It’s a few days i’m trying to build an app for indoor location of a user in to a room.
I’m using Estimote SDK . I had BAD results even if I tried many altrenatives.
I used, thrilateration, quadrilateration, some alhgoritms based on media and variance(made by myself) trying to reduce the noise…
I had unsatisfactories results (too wide fluctuations in very small range time) and i’m wondering if someone had any good experience in this kind of applications.
I know that results are good with IOS and I’m wondering if is it possible to replicate them in android system and if somone did…and could eventually help me.



I have same issues.
I’m trying to compensate the fluctuations in this way:

  • collect range data for 3-5 seconds
  • build a median, not arithmetical mean

The calculated position is then more precise, but you get the update of your position only one time per 3-5 seconds.

iOS had better results, because the iOS SDK is optimized for the hardware on iPhone or iPads.
Android is on very different devices, so its very difficult to optimize it.

Thanks alexander,

I tryed your way but the idea was to have a more short refresh time.
And even collecting data for more seconds I had unsatisfactories results.
I tried with many beacons, doing mean of all the possible thrilaterations
Maybe i’m doing something wrong or maybe it’s impossible what i supposed to do, and this is what i’m trying to know


I think a better approach is to combine 2 approaches : 1) using beacons 2) using accelerometer & gyro.
the idea is using the accelerometer & gyro for a very short distances in order to fill the gaps in beacon samples, i think estimote sdk ios is doing it the same way.

since the data accumulated from accelerometer and gyro has to be double integrated and interpolated a lot, so it accumulate a lot of errors, but for a short distances or short time it can “fill the gap” until you get an avg reading from the beacons

Hi Federico,

try setting the FORCE_OLD_SCANNING_API flag.


The fluctuations you experience may come from frequency hopping. Bluetooth LE advertises on 3 different channels and the Android bluetooth stack rotates between these three channel every few seconds. You can read a more sophisticated explanation here.
If I unsterstand the code correctly, if the FORCE_OLD_SCANNING_API is set, the BeaconService will basicly restart the BluetoothLeScanner every cycle before Android can switch the channels. Since the rotation order is fixed, this will result in android scanning only one channel, which makes the scanning results much better comparable.

@Estimote Staff: please correct me if i said anything wrong.

how can I use gyro and accelerometer for positioning?
can you give an example?