Включить службы определения местоположения для Android, если пользователь выбрал вариант «Никогда».

Есть ли способ снова разрешить службы определения местоположения для приложения (или, по крайней мере, показать диалоговое окно), если пользователь ранее выбрал вариант «Никогда»?

введите здесь описание изображения

Я не нахожу в коде способа показать это снова, так как я всегда получаю LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE в обратном вызове onResult(..):

    @Override
    public void onResult(LocationSettingsResult locationSettingsResult) {
        final Status status = locationSettingsResult.getStatus();
        switch (status.getStatusCode()) {
            case LocationSettingsStatusCodes.SUCCESS:
                Log.i(TAG, "All location settings are satisfied.");
//                        startLocationUpdates();
                break;
            case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                Log.i(TAG, "Location settings are not satisfied. Show the user a dialog to" +
                        "upgrade location settings ");

                try {
                    // Show the dialog by calling startResolutionForResult(), and check the result
                    // in onActivityResult().
                    status.startResolutionForResult(activity, REQUEST_CHECK_SETTINGS);

                } catch (IntentSender.SendIntentException e) {
                    Log.i(TAG, "PendingIntent unable to execute request.");
                }
                break;
            case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                Log.i(TAG, "Location settings are inadequate, and cannot be fixed here. Dialog " +
                        "not created.");
                break;
        }
    }

Единственное решение, которое я нашел, это переустановить приложение или очистить данные.


person nsL    schedule 20.07.2015    source источник
comment
если пользователь говорит, что больше никогда не показывать уведомление, то единственный способ вернуть его — это удалить. Вы должны предупредить пользователя о том, что он решил не включать службы определения местоположения для вашего приложения, и им придется включить его вручную, если они не хотят удалять   -  person tyczj    schedule 20.07.2015


Ответы (4)


Я не нашел обходного пути для включения служб определения местоположения, если ранее пользователь выбрал вариант «Никогда», поэтому я последовал приведенному выше ответу @Lesvmac, чтобы снова попросить пользователя удалить и переустановить приложение, но я думаю, что это неправильный способ решения проблемы вокруг .

Поэтому в настоящее время лучший способ - не допускать появления опции «Никогда» в диалоговом окне запроса. Попробуйте добавить

builder.setAlwaysShow(true);

в LocationSettingsRequest.Builder, что приведет к выбору только вариантов "Да" и "Нет" вместо значения по умолчанию "Никогда". ", "Да" и "Не сейчас", и вы никогда не получите SETTINGS_CHANGE_UNAVAILABLE.

Вот полный метод:

 private void requestSettings() {
    LocationSettingsRequest.Builder builder =
            new LocationSettingsRequest.Builder()
                    .setAlwaysShow(true)
                    .addLocationRequest(request);
    PendingResult<LocationSettingsResult> result =
            LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient,
                    builder.build());

    result.setResultCallback(this);
}

До
image_before_set_always_show

После

image_after_set_always_show

person Amrit Pal Singh    schedule 08.09.2015
comment
Это то, что я искал :) - person karthik kolanji; 02.09.2016
comment
в любом случае есть возможность настроить цвет диалогового окна? я хочу показать всплывающее диалоговое окно белого цвета.. я использую google api - person learner; 06.12.2016

Правильно, никогда не значит никогда! Если пользователь ранее ответил «не сейчас» на запрос разрешения местоположения вашего приложения, вы можете создать диалоговое окно с запросом разрешения. Но если они решили никогда не позволять вам спрашивать снова, это установлено навсегда, и вы должны попросить их удалить и переустановить. (В случае, если их местоположение временно отключено, но у приложения есть разрешение на доступ к их местоположению, может быть создано диалоговое окно с просьбой изменить статус службы определения местоположения для устройства.) Если определение местоположения является необходимым компонентом приложения, вы можете потребовать доступа при установке. В грядущей версии Android M для каждого приложения можно будет устанавливать и сбрасывать индивидуальные разрешения, что поможет избежать подобных проблем.

person Lesvmac    schedule 20.07.2015

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

Откройте информацию о приложении (либо перетащив из панели запуска приложений, либо Настройки - Приложения - [имя приложения])

Выберите разрешения

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

(Необязательно) Отключите его снова здесь; обратите внимание, что к этому времени ваше приложение снова запросит разрешение, когда это необходимо.

Ссылка: https://android.stackexchange.com/questions/125939/reset-the-request-permission-dialog-on-marshmallow

person Xiaomei Zeng    schedule 23.08.2016

Решение очень простое, и его очень легко пропустить (по крайней мере, на Android 5.1) ...

Проведите вниз от верхнего края экрана, чтобы открыть раскрывающееся меню. Нажмите «Управление разрешениями приложений». Нажмите Приложения и приложение, для которого вы хотите изменить разрешения. Вуаля!

person Jeepers    schedule 27.12.2016