Почему Android 10 и Android 9 LocationsSettingsRequest возвращают разные результаты - PullRequest
2 голосов
/ 01 октября 2019

Я разрабатывал приложение и тестировал его на Android 9, и все было хорошо. Неделю назад я обновил свой телефон до Android 10 и заметил, что разрабатываемое мной приложение начинает работать неправильно. Я проверил еще раз на Android 9, и это нормально, но новый Android 10 не работает должным образом.

Проблема, связанная с местоположением:

  1. Я спрашиваю разрешение на местоположение (с помощью Декстера)
Dexter.withActivity(this).withPermission(Manifest.permission.ACCESS_FINE_LOCATION).withListener(object : PermissionListener {
                @SuppressLint("MissingPermission")
                override fun onPermissionGranted(response: PermissionGrantedResponse?) {
                    Timber.d("onPermissionGranted [%s]", response?.permissionName)
                    turnOnLocation(OnSuccessListener {
                        requestLocation()
                    })
                }

                override fun onPermissionRationaleShouldBeShown(permission: PermissionRequest?, token: PermissionToken?) {
                    Timber.d("onPermissionRationaleShouldBeShown")
                    token?.continuePermissionRequest()
                }

                override fun onPermissionDenied(response: PermissionDeniedResponse?) {
                    Timber.d("onPermissionDenied [%s]", response?.permissionName)
                }
            }).check()
Когда разрешение было предоставлено, я попытался включить местоположение
private fun turnOnLocation(onSuccessListener: OnSuccessListener<LocationSettingsResponse>? = null) {
        val builder = LocationSettingsRequest.Builder().addLocationRequest(locationRequest).setAlwaysShow(true)
        val locationSettings = settingsClient.checkLocationSettings(builder.build())

        onSuccessListener?.let { locationSettings.addOnSuccessListener(it) }
        locationSettings.addOnFailureListener {
            if (it is ResolvableApiException) it.startResolutionForResult(this@MainActivity, requestCheckSettings)
        }
    }
Тогда я жду результата активности здесь:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == requestCheckSettings) {
            if (resultCode == RESULT_OK) {
                Timber.i("GPS enabled")
                requestLocation()
            } else {
                Timber.e("GPS is not enabled")
            }
        }
    }

Наконец:

Цитата

В ANDROID 10: после нажатияна «ОК» в диалоговом окне «Включить местоположение» - приложение перейдет ко мне к неожиданному поведению Timber.e("GPS is not enabled")

Цитата

В ANDROID 9: После нажатия на «ОК»в диалоговом окне «Включить местоположение» - приложение переходит ко мне к ожидаемому поведению Timber.i("GPS enabled")

У кого-нибудь есть мысли по этому поводу?

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