首页 > 解决方案 > 是否可以显式检查 onRequestPermissionsResult 中的权限?

问题描述

我正在制作一个将地图添加到活动的 Android 应用程序,用户可以使用“位置图层”将地图与当前位置居中。在地图中添加位置按钮:

 mMap.isMyLocationEnabled = true

我正在检查ACCESS_FINE_LOCATION里面的许可onMapReady,一切正常,但我需要完成活动并重新打开它以查看更改(位置按钮)。

所以,我onRequestPermissionsResult用来检查用户响应,但是当我打电话给mMap.isMyLocationEnabled = trueAndroid Studio 时说:

调用需要权限,可能会被用户拒绝:代码应明确检查权限是否可用(使用 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如果假设当前已授予,那么检查请求代码内部指令的许可的目的是什么?

标签: androidkotlinuser-permissionsruntime-permissions

解决方案


那么,如何在 onRequestPermissionsResult 中调用 mMap.isMyLocationEnabled = true?,

按照您的方式进行操作,并添加适当的@SuppressLint注释以抑制警告。Android Studio 中应该有一个快速修复,它将添加@SuppressLint正确的属性。

据推测,导致您的问题的 Lint 规则中存在一些错误或限制。例如,这是一个相对较旧的 Lint 检查,因此它可能无法正确处理所有 Kotlin 场景。


推荐阅读