Снова появится диалоговое окно запроса LocationSettings - PullRequest
1 голос
/ 07 октября 2019

Я пользуюсь сервисами Google Play. Для моего приложения местоположение является ключевым компонентом. Когда GPS выключен, я использую LocationSettingsClient, чтобы показать пользователю диалог для его включения. Проблема в том, что после нажатия OK на некоторых устройствах снова появляется диалоговое окно.

enter image description here

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

onResume

override fun onResume() {
        super.onResume()
        Log.v(TAG, "onResume")
        this.startLocationUpdates(UPDATE_INTERVAL_IN_MILLISECONDS, UPDATE_DISTANCE_THRESHOLD)
    }

private fun startLocationUpdates(interval: Long, distance: Float = 0f) {
        if (!mSettingsClientInit)
            return

        createLocationRequest(interval, distance)
        createLocationCallback()
        // Begin by checking if the device has the necessary location settings.
        mSettingsClient.checkLocationSettings(mLocationSettingsRequest)
                .addOnSuccessListener(this, object : OnSuccessListener<LocationSettingsResponse> {

                    override fun onSuccess(locationSettingsResponse: LocationSettingsResponse) {
                        Log.i(TAG, "LocationManager: All location settings are satisfied.");
                        mLocationCallback?.let {
                            fusedLocationClient?.requestLocationUpdates(mLocationRequest, mLocationCallback, Looper.myLooper());
                        }
//                        updateUI();
                    }
                })
                .addOnFailureListener(this, object : OnFailureListener {
                    override fun onFailure(e: Exception) {
                        Log.i(TAG, "Request PErmission failure");
                        var statusCode = (e as ApiException).getStatusCode()
                        when (statusCode) {
                            LocationSettingsStatusCodes.RESOLUTION_REQUIRED -> {
                                try {
                                    // Show the dialog by calling startResolutionForResult(), and check the
                                    // result in onActivityResult().
                                    var rae = e as ResolvableApiException;
                                    rae.startResolutionForResult(this@BaseLocationActivity, REQUEST_CHECK_SETTINGS);
                                } catch (sie: IntentSender.SendIntentException) {
                                    Log.i(TAG, "PendingIntent unable to execute request.");
                                }
                            }
                            LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE -> {
                                mRequestingLocationUpdates = false;
                            }

                        }
                    }
                }
                )
    }

Может кто-нибудь указать, почему на некоторых устройствах снова и снова появляется диалоговое окно LocationSettings, а не на всех устройствах?

Ответы [ 2 ]

1 голос
/ 07 октября 2019

Вы вводите код в onReSume , поэтому, когда вы нажимаете OK, этот код запускается снова и снова появляется диалоговое окно. Вы должны вставить onCreate , этот код будет запускаться только один раз при запуске приложений.

0 голосов
/ 07 октября 2019

Поместите этот код в onCreate вместо onResume . Потому что, когда диалог закрывается, вызывается onResume действия. Так что ваш диалог появится снова.

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