Получение RESOLUTION_REQUIRED всегда, даже если пользователь нажимает кнопку «ОК» в случае проверки настроек местоположения - PullRequest
3 голосов
/ 05 апреля 2019

Мое LocationRequest установлено в PRIORITY_HIGH_ACCURACY.Но в устройстве xiaomi redmi note 5, если я нажимаю кнопку «ОК» в диалоге настроек местоположения, он всегда возвращает 0 с помощью метода onActivityResult (), и я получаю «com.google.android.gms.common.api.ResolvableApiException: 6: RESOLUTION_REQUIRED».Но я проверил в некоторых других устройствах, он работает нормально.Я использовал этот gps включен / не включен проверка внутри фрагмента.

/////Code that prompts up the dialog

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

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

        task.addOnFailureListener(getActivity (), 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(getActivity (),
                                REQUEST_CHECK_SETTINGS);
                    } catch (IntentSender.SendIntentException sendEx) {
                        // Ignore the error.
                    }
                }
            }
        });

/////// onActivityResult() method inside my fragment
 @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {

        try {
            super.onActivityResult (requestCode, resultCode, data);
            switch (resultCode) {
                case -1:
                    requestLocationUpdates ();

                    break;
                case 0:
                   displayLocationSettingsRequest (getContext ());
                    break;
                default:
                    super.onActivityResult (requestCode, resultCode, data);
                    break;
            }
        } catch (Exception ex) {

        }


    }
...