Измените режим определения местоположения на высокоточный программно Android

Можно ли получить информацию о режиме местоположения, который пользователь выбрал среди трех режимов в параметрах настроек местоположения, т.е.

1. высокая точность

2. экономия батареи

3. только GPS

Я хочу программно проверить, выбрал ли пользователь режим высокой точности, если нет, то включите его автоматически. Является ли это возможным ? Пожалуйста посоветуй.


person ik024    schedule 07.08.2014    source источник
comment
я искал что-то подобное; чтобы включить его, для разработчиков ... как можно ближе к автоматическому, обнаружил, что он будет частью Google Play Services 7.0   -  person Pararth    schedule 12.03.2015


Ответы (3)


Получить текущий режим местоположения устройства можно, начиная с уровня API 19 (Kitkat):

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

Это возможные возвращаемые значения (см. здесь):

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

Итак, вы хотите что-то вроде

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

К сожалению, вы не можете программно установить режим местоположения, но вы можете отправить пользователя прямо на экран настроек, где он может это сделать:

startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
person kaolick    schedule 09.09.2014
comment
Вы уверены, что программно изменить режим локации нельзя? Я пытаюсь сделать что-то подобное и хотел бы автоматически изменить их, если смогу. Так что, если вы уверены, что это невозможно, было бы неплохо узнать. - person BlackThorn; 24.02.2017
comment
@TBear Да, конечно. Я не думаю, что приложение должно позволять манипулировать такими глобальными настройками. - person kaolick; 27.02.2017
comment
LOCATION_MODE _... больше не поддерживается. - person Mohammad Reza Lohrasbi; 19.02.2020

Вы можете указать критерии в LocationMamager.requestLocationUpdates. В качестве критерия вы можете указать одно из следующих значений, чтобы выбрать необходимую точность.

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.

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

person userM1433372    schedule 07.08.2014

Начиная с уровня API 28, вы должны использовать LocationManager.isProviderEnabled (), чтобы узнать, включен ли конкретный провайдер.

К сожалению, изменить настройку программным способом из вашего приложения невозможно.

person Magnus W    schedule 20.09.2018
comment
Дело не в том, включен GPS или нет; Речь идет о том, что он включен, но, например, он установлен в режим экономии заряда батареи. - person Dr.jacky; 25.04.2019