Проблема с диалоговым окном местоположения в Android Q Beta - PullRequest
0 голосов
/ 04 июня 2019

Activity.RESULT_CANCELED (value == 0 ) всегда вызывается onActivityResult(), даже когда в диалоговом окне местоположения нажимается OK

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

Используется следующий код -

                LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
                builder.addLocationRequest(new LocationRequest().setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY));
                builder.setAlwaysShow(true);
                mLocationSettingsRequest = builder.build();

                mSettingsClient = LocationServices.getSettingsClient(WifiList_Activity.this);

                mSettingsClient
                        .checkLocationSettings(mLocationSettingsRequest)
                        .addOnSuccessListener(new OnSuccessListener<LocationSettingsResponse>() {
                            @Override
                            public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
                                //Success Perform Task Here
                            }
                        })
                        .addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                                int statusCode = ((ApiException) e).getStatusCode();
                                switch (statusCode) {
                                    case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                                        try {
                                            ResolvableApiException rae = (ResolvableApiException) e;
                                           rae. startResolutionForResult(WifiList_Activity.this, REQUEST_CHECK_SETTINGS);
                                        } catch (IntentSender.SendIntentException sie) {
                                            Logger.log("GPS Unable to execute request.");
                                        }
                                        break;
                                    case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                                        Logger.log("GPS Location settings are inadequate, and cannot be fixed here. Fix in Settings.");
                                }
                            }
                        });

И код в onActivityResult(), как показано ниже,

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CHECK_SETTINGS) {
        switch (resultCode) {

            case Activity.RESULT_CANCELED:
                Logger.log("Result code in onACtivityresult CANCELED::"+resultCode);
                Logger.log("GPS User denied to access location");
                finish();
                break;


            case Activity.RESULT_OK:
                //Success Perform Task Here
                Logger.log("Result code in onACtivityresult OK::"+resultCode);
                break;
        }
  }

Но проблема в том, что даже если пользователь нажимает OK в диалоговом окне Location, Acivity.RESULT_CANCELED всегда вызывается, так как полученный resultCode равен 0.

Я настроил приложение на Android Q,

compileSDKVersion "android-Q'
targetSDKVersion 'Q'

Кроме того, запуск приложения на Android Q beta на устройстве Pixel.

Ожидается - при нажатии OK диалогового окна местоположения resultCode -1 должен быть возвращается в onActivityResult.

Actual - даже если нажата ok, resultCode 0 возвращается в onActivityResult.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...