Открыть настройки приложения и получить результат после того, как пользователь включил/отключил определенные функции?

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

if(!gps_enabled && !network_enabled) {
            // notify user
            new AlertDialog.Builder(this)
                    .setMessage(R.string.gps_network_not_enabled)
                    .setPositiveButton(R.string.open_location_settings, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface paramDialogInterface, int paramInt) {
                            startActivityForResult(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS), isGpsTurnedOnResult );
                        }
                    }).setNegativeButton(R.string.Cancel,null)
                    .show();
        }

Вот как я пытаюсь получить результат:

 @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    }

Когда я проверяю data, я вижу, что это значение null. Есть ли способ узнать, что пользователь включил местоположение? Конечно, я могу проверить это с помощью LocationManager, но это не то решение, которое мне нужно, если только оно не единственно возможное.


person Keselme    schedule 17.07.2019    source источник
comment
Возможный дубликат Как я могу вернуться назад в Мои действия из окна настроек GPS   -  person Charles Annic    schedule 17.07.2019


Ответы (1)


Настройка местоположения сборки

LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
     .addLocationRequest(locationRequest);

LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();

// ...

SettingsClient client = LocationServices.getSettingsClient(this);
Task<LocationSettingsResponse> task = client.checkLocationSettings(builder.build());

Предложить пользователю изменить настройки местоположения

task.addOnSuccessListener(this, new OnSuccessListener<LocationSettingsResponse>() {
    @Override
    public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
        // All location settings are satisfied. The client can initialize
        // location requests here.
        // ...
    }
});

task.addOnFailureListener(this, new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception e) {
        if (e instanceof ResolvableApiException) {
            // Location settings are not satisfied, but this can be fixed
            // by showing the user a dialog.
            try {
                // Show the dialog by calling startResolutionForResult(),
                // and check the result in onActivityResult().
                ResolvableApiException resolvable = (ResolvableApiException) e;
                resolvable.startResolutionForResult(MainActivity.this,
                        REQUEST_CHECK_SETTINGS);
            } catch (IntentSender.SendIntentException sendEx) {
                // Ignore the error.
            }
        }
    }
});
person Hardik Bambhania    schedule 17.07.2019