Можно ли явно проверить разрешения внутри onRequestPermissionsResult? - PullRequest
0 голосов
/ 09 сентября 2018

Я создаю приложение для Android, которое добавляет карту к деятельности, пользователь может центрировать карту по своему текущему местоположению, используя «слой местоположения». добавить кнопку местоположения на карте с помощью:

 mMap.isMyLocationEnabled = true

Я проверяю разрешение ACCESS_FINE_LOCATION внутри onMapReady метода, и все работает нормально, но мне нужно закончить activiy и снова открыть его, чтобы увидеть изменения (кнопка местоположения).

Итак, я использую onRequestPermissionsResult для проверки ответа пользователя, но когда я звоню mMap.isMyLocationEnabled = true Android Studio говорит:

Для вызова требуется разрешение, которое может быть отклонено пользователем: code shoud явно проверьте, если разрешение доступно (с checkPermission) или явно обработать потенциальное исключение SecurityException ...

Это мой код:

override fun onMapReady(googleMap: GoogleMap) {
    mMap = googleMap

    mMap.uiSettings.isCompassEnabled = true

    if(ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){
        ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION),SOLICITA_UBICACION_CLAVE)
    }else{
        mMap.isMyLocationEnabled = true

    }

    mMap.uiSettings.isMyLocationButtonEnabled  = true
    mMap.uiSettings.isZoomControlsEnabled = true
    // Add a marker in Sydney and move the camera
    val sydney = LatLng(-34.0, 151.0)
    mMap.addMarker(MarkerOptions().position(sydney).title("Marker in Sydney"))
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney))
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    when(item.itemId){
        android.R.id.home -> {
            onBackPressed()
            return true
        }
    }
    return super.onOptionsItemSelected(item)
}

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
    when(requestCode){
        SOLICITA_UBICACION_CLAVE -> {
            if((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)){
                mMap.isMyLocationEnabled = true
                Toast.makeText(this@MapsActivity,"Permiso garantizado",Toast.LENGTH_SHORT).show()
            }else{
                mMap.isMyLocationEnabled = false
                Toast.makeText(this@MapsActivity,"Permiso denegado",Toast.LENGTH_SHORT).show()
            }
        }
    }
}

Итак, как мне позвонить mMap.isMyLocationEnabled = true внутри onRequestPermissionsResult?,

Какова цель проверки разрешения внутри when инструкции для кода запроса, если предполагается, что он в данный момент предоставлен?

1 Ответ

0 голосов
/ 09 сентября 2018

Итак, как я могу вызвать mMap.isMyLocationEnabled = true внутри onRequestPermissionsResult?,

Сделайте так, как вы делаете, и добавьте соответствующую аннотацию @SuppressLint, чтобы подавить предупреждение. В Android Studio должно быть быстрое исправление, которое добавит @SuppressLint с нужным свойством.

Предположительно, есть некоторая ошибка или ограничение в правиле Lint, которое вызывает вашу проблему. Например, это относительно старая проверка Lint, и, возможно, она неправильно обрабатывает все сценарии Kotlin.

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