Активиране на режим на местоположение Висока точност или Пестене на батерията, програмно, без потребителят да трябва да посещава Настройки

Защо питам това:(също причината да го пробвам в приложение)

Случва се, когато използваме 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, wifi, самолетен режим и други). С помощта на новия клас SettingsApi можете да изведете диалогов прозорец за настройки на местоположението, който показва контрол с едно докосване, за да могат потребителите да променят настройките си, без да напускат приложението ви.

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

  • Определете дали съответните системни настройки са активирани на устройството, за да изпълни желаното искане за местоположение.
  • По избор извикайте диалогов прозорец, който позволява на потребителя да активира необходимите настройки за местоположение с едно докосване.


Оставяме предишната част за справка:
Актуализация/Отговор
За всеки, който търси този отговор, Google Play Services 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 мениджър -› Екстри -› 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
API на googleclient е остарял, какво е друго решение и искам да включа gps и да получа географска ширина, дължина, без да отивам в настройките. Моля, насочете ме за това - person Adnan haider; 22.12.2020

Имам решение, тествано на Android 6.0.1 Marshmallow, при събитие на бутон OnClick извикване на void:

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 (от root 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" />
person Henrique José dos Santos Neto    schedule 11.02.2016
comment
Не всички телефони са руутнати. Това не е осъществимо решение. - person PsyGik; 29.02.2016
comment
Това не работи с безсистемни руутнати устройства с Android 6, нали? Приложението трябва да бъде и системно приложение, нали? Говоря само за android 6 и по-нова версия... - person prom85; 25.07.2016
comment
защо не е осъществимо? Работи за мен. Имам нужда от тестване, за да превключвам между режимите на местоположение, така че инсталирах приложението си на UNrooted 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