Подтвердить что ты не робот

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

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

Это происходит, когда мы используем Карты 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)); не работает.

4b9b3361

Ответ 1

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

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

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

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

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

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

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


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

Сервисы Google Play, версия 7.0 (март 2015 г.) выпущены...

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

Использование публичного интерфейса SettingsApi

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


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

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

exactly this

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

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

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

обновит программный loc после реализации

Ответ 2

Основываясь на примечаниях @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);

В принципе, ваш пользователь получит приглашение вроде этого, где они могут включить режим Location in High Accuracy, не вдаваясь в настройки Turn on GPS

Ответ 3

У меня есть решение, протестированное на 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 была включена или укоренена. Выполните команду ниже в adb shell (из корневой оболочки на устройстве или с компьютера, подключенного через USB, если устройство не внедрено):

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" />