Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

LocationManager calling onLocationChanged too often?

Tags:

android

I've set up the LocationManager to get the current location every 2 minutes:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 120000, 0, this);

This works fine and onLocationChanged is called every 2 minutes as expected. However, it seems that it is being called multiple times over a 10-40 (a random amount) second span every 2 minutes. I log every location received in the onLocationChanged so here are some samples to get an idea of what is going on:

At 17:30

GPS 32.0 50.66318929195404 10.735434293746948 0.0 2010.08.07 17:30:10
GPS 32.0 50.66315710544586 10.735423564910889 0.0 2010.08.07 17:30:14
GPS 32.0 50.66314101219177 10.735418200492859 0.0 2010.08.07 17:30:17
GPS 32.0 50.66314101219177 10.735418200492859 0.0 2010.08.07 17:30:20
GPS 24.0 50.66313564777374 10.735418200492859 0.5 2010.08.07 17:30:24
GPS 32.0 50.663098096847534 10.735573768615723 0.0 2010.08.07 17:30:28         
GPS 32.0 50.663065910339355 10.735611319541931 0.0 2010.08.07 17:30:31

Then I get no more updates for 2 minutes.

At 17:32

GPS 32.0 50.661821365356445 10.737022161483765 1.0 2010.08.07 17:32:39
GPS 16.0 50.66170871257782 10.737043619155884 1.8200275 2010.08.07 17:32:45
GPS 24.0 50.661579966545105 10.737027525901794 1.25 2010.08.07 17:32:50
GPS 16.0 50.66150486469269 10.73712408542633 1.0 2010.08.07 17:32:55
GPS 12.0 50.661579966545105 10.73715090751648 0.9013878 2010.08.07 17:33:01
GPS 24.0 50.66139221191406 10.737038254737854 1.5811388 2010.08.07 17:33:06
GPS 16.0 50.66141366958618 10.737301111221313 0.70710677 2010.08.07 17:33:12
GPS 16.0 50.66141366958618 10.737301111221313 0.70710677 2010.08.07 17:33:12
GPS 24.0 50.661311745643616 10.737070441246033 1.118034 2010.08.07 17:33:16
GPS 16.0 50.66122591495514 10.737177729606628 1.118034 2010.08.07 17:33:22
GPS 12.0 50.66124200820923 10.737220644950867 1.3462912 2010.08.07 17:33:26
GPS 12.0 50.661311745643616 10.737268924713135 3.6055512 2010.08.07 17:33:25

And so on... then another set of updates 2 minutes later at 17:35.

Is this the standard behavior? I was expecting to get only one location every 2 minutes, and the timespan in which it gives me location updates seems rather random. Ideally I would prefer to only get one location... is there a way to do this?

like image 201
migueljuan Avatar asked Aug 10 '10 13:08

migueljuan


2 Answers

From the documentation of requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener) concering the minTime parameter:

"the minimum time interval for notifications, in milliseconds. This field is only used as a hint to conserve power, and actual time between location updates may be greater or lesser than this value."

So the answer to your questions, yes this is standard behavior and, no you cannot change this.

If this is a problem for you, you could ignore calls to the callback method if a certain amount of time hasn't passed.

like image 168
Key Avatar answered Oct 03 '22 01:10

Key


I found this question because I had the same problem.

I believe I have the answer. The rapid updates are being fired because you have the meters parameter set to 0.

Change the meters parameter to something like 10 and it will only fire the LocationChanged event every 2 minutes IF your location changed by 10 or more.

Before I made this change, LocationChanged was firing multiple times a second. Now, it fires once. Then every 2 minutes, you will see the GPS icon on the status bar, but unless your location changed, the event doesn't fire.

I hope this helps. This is what fixed it for me. Didn't have to add any extra logic to prevent false fires.

like image 35
Kevin Avatar answered Oct 03 '22 01:10

Kevin