Fused Location Provider setsmallestDisplacement doesn't work in Android Fused Location Provider setsmallestDisplacement doesn't work in Android android android

Fused Location Provider setsmallestDisplacement doesn't work in Android


If the Displacement is set for LocationRequest, no chance of getting the locations if device is still as Displacement takes precedence over Intervals (interval and fastestInterval).As I could guess - May be you have passed different LocationRequest object (with no displacement set) to LocationServices.FusedLocationApi.requestLocationUpdates().

I was looking for an answer to how locs are received if both interval and displacement set. I just verified for myself with my application and below is the behavior for different configuration for LocationRequest:

  1. No Displacement parameter set
    setInterval is set to 1 min and fastest to 1 min.

    I received location every one mins. But you see sometimes it received fast and sometimes slower which is because setInterval is inexact.

06-03 11:46:55.408 25776-25776/ MyLocationListener﹕ onLocationChanged.
06-03 11:47:56.008 25776-25776/MyLocationListener﹕ onLocationChanged.
06-03 11:48:18.768 25776-25776/MyLocationListener﹕ onLocationChanged.
06-03 11:49:22.938 25776-25776/MyLocationListener﹕ onLocationChanged.
06-03 11:50:22.948 25776-25776/MyLocationListener﹕ onLocationChanged.
06-03 11:52:22.978 25776-25776/MyLocationListener﹕ onLocationChanged.
06-03 11:53:22.998 25776-25776/MyLocationListener﹕ onLocationChanged.

  1. Displacement parameter is set to 10 meters
    setInterval as above 1 mins.

    No location updates are received if the device does not move or cross that distance. Between every onLocationChanged below I walked more than 10 meters so I received loc.

06-03 11:26:53.328 16709-16709/MyLocationListener﹕ onLocationChanged.
06-03 11:35:38.318 16709-16709/MyLocationListener﹕ onLocationChanged.
06-03 11:39:16.728 16709-16709/MyLocationListener﹕ onLocationChanged.


It may happen that you are getting different lat-long in onLocationChanged method which describes more displacement than 10. So kindly checkout the lat-long which you are getting and measure the distance once manually to cross-verify the things.

Apart from above, one more possible reason is matter of priority,If above case seems fine then try like following:

 mlocationrequest = LocationRequest.create();mlocationrequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);mlocationrequest.setSmallestDisplacement(10);mlocationrequest.setInterval(60000); // Update location every 1 minutemlocationrequest.setFastestInterval(10000);