Should I use android LocationManager.getBestProvider every time I ask for location updates?

Or Kazaz picture Or Kazaz · Oct 16, 2012 · Viewed 19.6k times · Source

I'm using Google APIs and the MapActivity, MapView etc..
When I need to get my current location I use this code the FIRST TIME :

myLocationManager =(LocationManager)getSystemService(Context.LOCATION_SERVICE);
// Sets the criteria for a fine and low power provider
Criteria crit = new Criteria();
crit.setAccuracy(Criteria.ACCURACY_FINE);
crit.setPowerRequirement(Criteria.POWER_LOW);    
// Gets the best matched provider, and only if it's on
String provider = myLocationManager.getBestProvider(crit, true);
// If there are no location providers available
if (provider == null){
    OnClickListener listener = new OnClickListener() {

        public void onClick(DialogInterface dialog, int which) {
            // Closes the activity
            finish();
        }
    };
    Utils.getInstance().showAlertDialog(this, R.string.warning_dialog_title,
                               R.string.no_location_providers_error_message,
                            android.R.drawable.ic_dialog_alert, false, listener);
}
// Location services is enabled
else{
    myLocationListener = new MyLocationListener();
    myLocationManager.requestLocationUpdates(
            provider,
            0,
            0,
            myLocationListener);        
    // TODO - put a marker in my location       
    GeoPoint currentGeoPoint = MapUtils.getInstance().
            getCurrentLocation(myLocationManager, provider);        
    // Center to the current location
    centerLocation(currentGeoPoint, MAX_ZOOM);
}

I also have a "back to current location button" - for when the user moves the map around and wants to quickly return to his current location.

My question is, should I use the getBestProvider() method each time I want to get location information?

I could save the last choosen provider, but the conditions could change every second:

  1. User turned off GPS
  2. No GPS signal
  3. NETWORK_PROVIDER is better in the current situation
  4. etc..

What is the right approach?

Answer

Or Kazaz picture Or Kazaz · Apr 11, 2013

Like been told on the coments, this is the answer: http://developer.android.com/guide/topics/location/strategies.html#BestEstimate