I’m trying to find the optimal minDistance value for my application in the requestLocationUpdates method. I would like to generate 1 location every 10 minutes and when I’m moving something like 100 meters.
I tried to set the minDistance parameter to 100 but I keep getting locations while my phone doesn’t move even 1 meter! I keep increasing it and I stoped in 500m as a parameter since it become useless.
My question is, how come I keep getting updates while my phone is moving in the wrost case 5 meters and my minDistance parameter is 500.
Here is some code:
if (mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, TEN_SECONDS*6*5, TEN_METERS*50, listener);
if (mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER))
mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, TEN_SECONDS*6*5, TEN_METERS*50, listener);
I’m using a timer task which ran every 10 minutes, here is the listener and the task:
...
@Override
public void onLocationChanged(Location location)
{
handleLocation(location);
}
...
private void handleLocation(Location location)
{
if(isUsable(location))
this.location = location;
}
public boolean isUsable(Location location)
{
return location!=null && location.hasAccuracy() && location.getAccuracy() < 800;
}
public void run()
{
if(location!=null)
{
Timestamp ts1 = new Timestamp(new java.util.Date().getTime());
if (mGeocoderAvailable)
address = reverseGeocode(LocationService.this.location);
if(address != "" && !address.equals(lastAddress))
{
lastAddress = address;
new SendLocation(LocationService.this.id,address,ts1);
}
}
}
I don’t think that the task really matters in here, it includes some conditions that I care about and the starting a new thread that sends the information to the db.
The result is: same location provides me diffrent locations while my phone is not moving with 500m as minDistance parameter.
Its because the GPS is setting itself up to be used(During this period it tries to get exact location of you), Thereby few location updates will be noticed.
Try using this in your code:-
This one makes sure that the processing should be done only if the speed is > 0. Now your device won’t bother if its in the same place and you can use mindistance upto 100m too.