Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I decide what interval to use for requestLocationUpdates?

LocationManager#requestLocationUpdates allows you to pass in a minTime and minDistance parameter. I'm having a hard time deciding what these numbers should be, and could appreciate some guidance.

Our app is not a turn-by-turn navigation app; I just want to show the 10 nearest points of interest. Since I'm showing the 10 nearest, they can get a little stale, but if the user is in a moving vehicle, I'd want/need to update them pretty frequently to avoid staleness.

I imagine a lot of people are in the same position of vague requirements: "I don't want the data to be too stale, but I don't want to waste battery." How can I turn these vague requirements into concrete numbers?

like image 987
Dan Fabulich Avatar asked Jun 22 '11 15:06

Dan Fabulich


3 Answers

***<Edit>***
As of JellyBean, the criteria is (minTime & minDistance), so it has 
to satisfy both to return a location.
***</Edit>***

Based on your problem, it sounds to me like the minTime parameter is irrelevant.

What you really need to worry about is minDistance, so that if a user is in a fast moving vehicle, it will keep up.

If a person is driving 60 MPH, they move about 27 meters per second.

Considering this critera... I would say to use:

minTime = 60000 // update every 60 seconds
minDistance = 90 // in a fast moving vehicle, it will update roughly once every 3 seconds

like image 169
Matt Avatar answered Oct 01 '22 04:10

Matt


It has been described nicely in requestLocationUpdates docs

The frequency of notification or new locations may be controlled using the minTime and minDistance parameters. If minTime is greater than 0, the LocationManager could potentially rest for minTime milliseconds between location updates to conserve power. If minDistance is greater than 0, a location will only be broadcast if the device moves by minDistance meters. To obtain notifications as frequently as possible, set both parameters to 0. Background services should be careful about setting a sufficiently high minTime so that the device doesn't consume too much power by keeping the GPS or wireless radios on all the time. In particular, values under 60000ms are not recommended.

like image 34
Sujit Avatar answered Oct 01 '22 03:10

Sujit


I can suggest a better idea that, initially request updates with a little larger interval and get the locations. Now check if the distance between the consecutive locations is more than the minimum distance to distinguish the nearer locations, change your request update interval to lower value. Similarly if in this lower interval the distance you computed of much lower that indicates the user in not traveling through vehicle then update interval to larger value. To update the interval you have to unregister previous listener and then re-regiser with new value.

like image 28
Neeraj Nama Avatar answered Oct 01 '22 02:10

Neeraj Nama