Change Location Mode to High Accuracy Programmatically Android

29,782

Solution 1

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));

Solution 2

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

Constants
int ACCURACY_COARSE A constant indicating an approximate accuracy requirement
int ACCURACY_FINE   A constant indicating a finer location accuracy requirement
int 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.

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

Solution 3

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.

Share:
29,782
ik024
Author by

ik024

Updated on December 02, 2020

Comments

  • ik024
    ik024 over 3 years

    Is it possible to get the information on the location mode which the user has selected among the three modes under the location settings options i.e

    1.Hight Accuracy

    2.Battery Saving

    3.GPS Only

    I want to programmatically check if user has selected High Accuracy mode if not then enable it automatically. Is it possible ? Please advice.