Включение режима определения местоположения «Высокая точность» или «Экономия заряда батареи» программно, без необходимости посещения пользователем настроек

Почему я спрашиваю об этом:(также причина попробовать это в приложении)

Это происходит, когда мы используем Карты Google в Lollipop. Даже если функция «Местоположение» отключена, она включается в режиме высокой точности после того, как пользователь вводит данные из приложения «Карты», без необходимости заходить в «Настройки».

Аналогичная функциональность может быть достигнута для включения Bluetooth, когда действие инициируется в моем приложении; пользователю нужно сделать выбор, но пользователь не перенаправляется в настройки, используя:

startActivity(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE));

который можно найти на BluetoothAdapter, теперь мы знаем, что нет LocationAdapter, поэтому я просмотрел gms->LocationServices почти все в разделе ссылки на API определения местоположения, android.location.LocationManager, но не похоже на ACTION_REQUEST_ENABLE пока доступен.

Надеюсь, есть какой-то другой метод для того же, и больше людей попробовали его.

Обратите внимание:
context.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); так не работает.




Ответы (3)


ОБНОВЛЕНИЕ 3:

Предлагать пользователю изменить настройки местоположения как упоминалось в комментариях @patrickandroid, ссылка из второго обновления не работает

GoogleSamples; android Расположение и параметры — для справки по коду.

ОБНОВЛЕНИЕ 2:

GoogleSamples; - для справки по коду.

Этот пример основан на образце LocationUpdates, включенном в этот репозиторий, и позволяет пользователю обновлять параметры местоположения устройства с помощью диалогового окна местоположения.

Использует SettingsApi, чтобы убедиться, что системные параметры устройства правильно настроены для нужд приложения.


ОБНОВЛЕНИЕ 1:

Сервисы Google Play, версия 7.0 (март 2015 г.)...< /а>

Настройки местоположения. Хотя FusedLocationProviderApi объединяет несколько датчиков, чтобы предоставить вам оптимальное местоположение, точность местоположения, которое получает ваше приложение, по-прежнему сильно зависит от настроек, включенных на устройстве (GPS, Wi-Fi, режим полета и другие). Используя новый класс SettingsApi, вы можете вызвать диалоговое окно «Настройки местоположения», в котором отображается элемент управления одним касанием, позволяющий пользователям изменять свои настройки, не выходя из вашего приложения.

Использование открытого интерфейса SettingsApi

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


Оставив предыдущую часть для справки:
Обновление/ответ
Всем, кто ищет этот ответ, Сервисы Google Play 7.0
> Он добавляет API для обнаружения мест и подключения к ближайшим устройствам, улучшает мобильную рекламу, данные о фитнесе, настройки местоположения и многое другое.

В сервисах Google Play 7.0 мы представляем стандартный механизм проверки того, включены ли необходимые настройки местоположения для успешного выполнения данного запроса LocationRequest. Если есть возможные улучшения, вы можете отобразить элемент управления одним касанием, чтобы пользователь мог изменить свои настройки, не выходя из вашего приложения.

именно это

Этот API предоставляет прекрасную возможность значительно улучшить взаимодействие с пользователем, особенно если информация о местоположении имеет решающее значение для взаимодействия с пользователем вашего приложения, как это было в случае с Google Maps, когда они интегрировали диалоговое окно «Настройки местоположения» и значительно увеличили количество запросов. количество пользователей в хорошем состоянии местоположения.

Источник: Блог разработчиков Android: Сервисы Google Play 7.0 — Места для всех!

SDK скоро появится!
В ближайшие несколько дней мы запустим сервисы Google Play версии 7.0. Ожидайте обновления этой записи в блоге, опубликованной документации и доступности SDK после завершения развертывания.

обновит программный l-o-c после реализации

person Pararth    schedule 12.03.2015
comment
мне нужна новая загрузка SDK вы можете добавить ссылку ?? - person Ando Masahashi; 25.03.2015
comment
в основном ваш менеджер SDK -> Extras -> Google Play Services, обновите его, и он будет включен в ваш проект библиотеки. - person Pararth; 25.03.2015
comment
Первая ссылка выше битая. - person patrick-fitzgerald; 25.01.2019
comment
@patrickandroid спасибо, ссылка обновлена, код не просматривался - person Pararth; 29.01.2019

Основываясь на примечаниях @user2450263 выше, вот несколько фрагментов,

/**
 * Prompt user to enable GPS and Location Services
 * @param mGoogleApiClient
 * @param activity
 */
public static void locationChecker(GoogleApiClient mGoogleApiClient, final Activity activity) {
    LocationRequest locationRequest = LocationRequest.create();
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    locationRequest.setInterval(30 * 1000);
    locationRequest.setFastestInterval(5 * 1000);
    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
            .addLocationRequest(locationRequest);
    builder.setAlwaysShow(true);
    PendingResult<LocationSettingsResult> result =
            LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build());
    result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
        @Override
        public void onResult(LocationSettingsResult result) {
            final Status status = result.getStatus();
            final LocationSettingsStates state = result.getLocationSettingsStates();
            switch (status.getStatusCode()) {
                case LocationSettingsStatusCodes.SUCCESS:
                    // All location settings are satisfied. The client can initialize location
                    // requests here.
                    break;
                case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                    // Location settings are not satisfied. But could be fixed by showing the user
                    // a dialog.
                    try {
                        // Show the dialog by calling startResolutionForResult(),
                        // and check the result in onActivityResult().
                        status.startResolutionForResult(
                                activity, 1000);
                    } catch (IntentSender.SendIntentException e) {
                        // Ignore the error.
                    }
                    break;
                case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                    // Location settings are not satisfied. However, we have no way to fix the
                    // settings so we won't show the dialog.
                    break;
            }
        }
    });
}

И использовать его как,

mGoogleApiClient = new GoogleApiClient
            .Builder(this)
            .enableAutoManage(this, 34992, this)
            .addApi(LocationServices.API)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();

    locationChecker(mGoogleApiClient, MyActivity.this);

По сути, ваш пользователь получит такое приглашение, где он может включить определение местоположения в режиме высокой точности, не заходя в настройки Включить  GPS

person PsyGik    schedule 29.10.2015
comment
googleclient api устарел, какое другое решение, и я хочу включить gps и получить широту, долготу, не переходя к настройке. пожалуйста, подскажите мне об этом - person Adnan haider; 22.12.2020

У меня есть решение, протестированное на Android 6.0.1 Marshmallow, при событии кнопки OnClick вызовите пустоту:

private void openGPSSettings() {
    //Get GPS now state (open or closed)
    boolean gpsEnabled = Settings.Secure.isLocationProviderEnabled(getContentResolver(), LocationManager.GPS_PROVIDER);

    if (gpsEnabled) {
        Settings.Secure.putInt(getContentResolver(), Settings.Secure.LOCATION_MODE, 0);
    } else {
        Settings.Secure.putInt(getContentResolver(), Settings.Secure.LOCATION_MODE, 3);
    }
}

Android должен иметь включенную отладку по USB или иметь root-права. Выполните приведенную ниже команду в adb shell (из корневой оболочки на устройстве или с компьютера, подключенного через USB, если устройство не имеет root-прав):

pm grant com.example.application.test android.permission.WRITE_SECURE_SETTINGS

Добавьте эти разрешения в манифест приложения:

<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
person Henrique José dos Santos Neto    schedule 11.02.2016
comment
Не все телефоны рутированы. Это невыполнимое решение. - person PsyGik; 29.02.2016
comment
Это не работает с бессистемными рутированными устройствами Android 6, не так ли? Приложение также должно быть системным, верно? Я говорю только об андроиде 6 и выше... - person prom85; 25.07.2016
comment
почему это невыполнимо? Работает на меня. Мне нужно для тестирования переключаться между режимами местоположения, поэтому я установил свое приложение на Galaxy S6 без рута, запустил adb shell pm grant ‹my package› android.permission.WRITE_SECURE_SETTINGS, он выполняет свою работу (в первый раз появляется диалоговое окно телефона, но затем , режим последовательно переключается в режим высокой точности, ). - person waggledans; 15.09.2016
comment
Однако это не является жизнеспособным решением для большинства приложений Android. - person patrick-fitzgerald; 11.01.2019