Change Location Mode to High Accuracy Programmatically Android Change Location Mode to High Accuracy Programmatically Android android android

Change Location Mode to High Accuracy Programmatically Android


It is possible to get the device's current location mode since API level 19 (Kitkat):

public int getLocationMode(Context context) {    return Settings.Secure.getInt(activityUnderTest.getContentResolver(), Settings.Secure.LOCATION_MODE);}

These are the possible return values (see here):

0 = LOCATION_MODE_OFF  1 = LOCATION_MODE_SENSORS_ONLY  2 = LOCATION_MODE_BATTERY_SAVING  3 = LOCATION_MODE_HIGH_ACCURACY

So you want something like

if(getLocationMode(context) == 3) {    // do stuff}

Unfortunately you can't set the location mode programmatically but you can send the user directly to the settings screen where he can do that:

startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));


You can provide criteria in the LocationMamager.requestLocationUpdates. As criteria you can provide one of the following values to select the accuracy needed.

Constantsint ACCURACY_COARSE A constant indicating an approximate accuracy requirementint ACCURACY_FINE   A constant indicating a finer location accuracy requirementint ACCURACY_HIGH   a constant indicating a high accuracy requirement - may be used for horizontal, altitude, speed or bearing accuracy.int ACCURACY_LOW    A constant indicating a low location accuracy requirement - may be used for horizontal, altitude, speed or bearing accuracy.int ACCURACY_MEDIUM A constant indicating a medium accuracy requirement - currently used only for horizontal accuracy.

Seehttp://developer.android.com/reference/android/location/LocationManager.html#requestLocationUpdates(long, float, android.location.Criteria, android.app.PendingIntent)


Since API level 28, you should use LocationManager.isProviderEnabled() to find out if a specific provider is enabled or not.

Changing the setting programmatically from your app is unfortunately not possible.