tags:

views:

4845

answers:

3

So I'm trying to sample the gps coordinates just once in an application. I don't want to create a LocationListener object to constantly get gps updates. I want to wait until receiving the coordinates, and then proceed on to another task.

Here is a code snippet

LocationManager lm = (LocationManager)act.getSystemService(Context.LOCATION_SERVICE);
Criteria crit = new Criteria();
crit.setAccuracy(Criteria.ACCURACY_FINE);
String provider = lm.getBestProvider(crit, true);
Location loc = lm.getLastKnownLocation(provider);

The loc variable is always null in the emulator. I tried using the command "geo fix latitude longitude" to set it, and also I tried using the DDMS way of setting it. Neither method had any effect on the code. Also the snippet isn't causing any exceptions.

Thanks for your help.

A: 

Try using the MyLocationOverlay , create a runnable that does what you need to do with that GPS location, and pass it to

boolean     runOnFirstFix(java.lang.Runnable runnable)
          Queues a runnable to be executed as soon as we have a location fix.

and then disable the location updates for the MyLocationOverlay.

Edit: The reason the location is null is because at the time that code is run, no geofix has been received.

I82Much
+2  A: 

The call to request update for a location is not blocking, hence it wont wait there. Also the provider in emulator may not have been started.

A possible check could be to see if the settings in it disable gps provider ? then send geo fix.

However, I would use Location Listener, it would be ideal in your case since you need a geo fix to proceed further.Location Listener is Used for receiving notifications from the LocationManager when the location has changed. You can unregister the listener after first geofix.

Note: It can take some time on device to get current location, and even on device this can return null.

krishnakanthc
Yeah, doing a LocationListener then waiting till you have a fix you're happy with is pretty much your only option. As mentioned, you can immediately unregister it.
fiXedd
It turns out that without any LocationListener it will not work. Even just adding a mock LocationListener that doesn't even do anything will cause the phone to get gps coordinates.
Robert Parker
I am assuming LocationListener updates some cached location, which locationManager uses. Thanks for posting.
krishnakanthc
+1  A: 

Here's a nice example with source code http://marakana.com/forums/android/android_examples/42.html

Fedor