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

LocationServices.SettingsApi Reset SETTINGS_CHANGE_UNAVAILABLE flag

Обновление для Google Play Services v7.0 + и на основе этого примера для LocationUpdates в Android, у меня есть следующий код для подключения к LocationServices.SettingsApi и проверьте, есть ли у пользователя все в порядке, чтобы приложение получало обновления местоположения.

    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
    builder.addLocationRequest(mLocationRequest);
    mLocationSettingsRequest = builder.build();

    PendingResult<LocationSettingsResult> result =
            LocationServices.SettingsApi.checkLocationSettings(
                    mLocationClient,
                    mLocationSettingsRequest
            );
    result.setResultCallback(this);

Где this - следующий обратный вызов:

    @Override
    public void onResult(LocationSettingsResult locationSettingsResult) {

        final Status status = locationSettingsResult.getStatus();
        Intent resolutionIntent;
        switch (status.getStatusCode()) {
            case LocationSettingsStatusCodes.SUCCESS:
                // Everything is OK, starting request location updates
                break;
            case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                // Seems the user need to change setting to enable locations updates, call startResolutionForResult(Activity, REQUEST_CODE)
                break;
            case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                // Error, cannot retrieve location updates.
                break;
        }
    }

SUCCESS ОК, чтобы воспроизвести, просто включите GPS.

RESOLUTION_REQUIRED также подходит для воспроизведения, отключает только GPS.

SETTINGS_CHANGE_UNAVAILABLE - это сделка. Если пользователь выбирает "НИКОГДА" , когда выполняется шаг RESOLUTION_REQUIRED, результат всегда будет с этим статусом.

У Google Play Services есть опция reset программно флаг, когда пользователь выбирает параметр "НИКОГДА" ?

Я знаю, что "НИКОГДА" , похоже, " На самом деле, не спрашивайте меня снова!!!", но я думаю, чтобы создать вариант, если пользователь передумает, конечно, если это возможно.

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

4b9b3361

Ответ 1

LocationSettingsRequest.Builder имеет метод setAlwaysShow который изменяет кнопки диалога:

Всегда показывать диалог без опции "Никогда" для подавления будущего диалоги из этого приложения. Если для этого флага установлено значение true, диалог будет если настройки местоположения не удовлетворяют запросу, даже если пользователь ранее выбрал "Никогда". ПРИМЕЧАНИЕ. Используйте этот метод только в том случае, если диалог является результатом явного инициированного пользователем действия, которое требуется место для продолжения. Отмена этого диалога также должна отменить инициированное действие.

Вместо стандартных кнопок "Да", "Нет" и "Никогда", если вы вызываете setAlwaysShow(true);, у вас будут только "Да" и "Нет", поэтому пользователь не будет выбирать "Никогда", и вы никогда не получите SETTINGS_CHANGE_UNAVAILABLE

LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
builder.addLocationRequest(mLocationRequest);
builder.setAlwaysShow(true); 
mLocationSettingsRequest = builder.build();

PendingResult<LocationSettingsResult> result =
        LocationServices.SettingsApi.checkLocationSettings(
                mLocationClient,
                mLocationSettingsRequest
        );

result.setResultCallback(this);