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

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

enter image description here

Я не могу найти какой-либо способ в коде, чтобы показать его снова, так как я всегда получаю 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;
        }
    }

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

Ответ 1

Я не нашел обходного пути для включения служб определения местоположения, если ранее пользователь выбрал опцию Никогда ", поэтому я ответил на ответ @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

Ответ 2

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

Ответ 3

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

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

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

Включите разрешение, с которым вы отказали, "никогда не спрашивайте снова"

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

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

Ответ 4

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

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