Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是否可以在onRequestPermissionsResult中显式检查权限?_Android_Kotlin_User Permissions_Runtime Permissions - Fatal编程技术网

Android 是否可以在onRequestPermissionsResult中显式检查权限?

Android 是否可以在onRequestPermissionsResult中显式检查权限?,android,kotlin,user-permissions,runtime-permissions,Android,Kotlin,User Permissions,Runtime Permissions,我正在制作一个Android应用程序,在活动中添加一张地图,用户可以使用“位置层”将地图与当前位置居中。要在地图中添加位置按钮,请执行以下操作: mMap.isMyLocationEnabled = true 我正在检查ACCESS\u FINE\u LOCATION方法中的onMapReady权限,一切正常,但我需要完成活动并重新打开它以查看更改(位置按钮) 因此,我使用onRequestPermissionsResult检查用户响应,但当我调用mMap.isMyLocationEnabl

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

 mMap.isMyLocationEnabled = true
我正在检查
ACCESS\u FINE\u LOCATION
方法中的
onMapReady
权限,一切正常,但我需要完成活动并重新打开它以查看更改(位置按钮)

因此,我使用
onRequestPermissionsResult
检查用户响应,但当我调用
mMap.isMyLocationEnabled=true
Android Studio时,会说:

调用需要权限,用户可能会拒绝该权限:代码shoud 明确检查权限是否可用(使用 检查权限)或显式处理潜在安全性异常

这是我的代码:

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()
            }
        }
    }
}
override-fun-onMapReady(谷歌地图:谷歌地图){
mMap=谷歌地图
mMap.uiSettings.iscompassabled=true
if(ContextCompat.checkSelfPermission(this,android.Manifest.permission.ACCESS\u FINE\u LOCATION)!=PackageManager.permission\u已授予){
ActivityCompat.requestPermissions(这个,arrayOf(android.Manifest.permission.ACCESS\u FINE\u LOCATION),requesta\u UBICACION\u CLAVE)
}否则{
mMap.isMyLocationEnabled=真
}
mMap.uiSettings.IsMyLocationButtonneEnabled=true
mMap.uiSettings.isZoomControlsEnabled=true
//在Sydney添加一个标记并移动相机
val sydney=LatLng(-34.0151.0)
mMap.addMarker(MarkerOptions().position(sydney).title(“sydney中的标记”))
mMap.moveCamera(CameraUpdateFactory.newLatLng(悉尼))
}
覆盖选项ItemSelected(项:菜单项):布尔值{
时间(item.itemId){
android.R.id.home->{
onBackPressed()
返回真值
}
}
返回super.onOptionsItemSelected(项目)
}
重写onRequestPermissionsResult(请求代码:Int,权限:Array,GrantResult:IntArray){
何时(请求代码){
征求意见书->{
if((grantResults.isNotEmpty()&&grantResults[0]==PackageManager.PERMISSION_已授予)){
mMap.isMyLocationEnabled=真
Toast.makeText(this@MapsActivity,“Permiso garantizado”,Toast.LENGTH_SHORT.show()
}否则{
mMap.isMyLocationEnabled=false
Toast.makeText(this@MapsActivity,“Permiso denegado”,Toast.LENGTH_SHORT.show()
}
}
}
}
那么,如何在
onRequestPermissionsResult
中调用
mMap.isMyLocationEnabled=true

如果假定请求代码的
指令当前已授予,则在
指令中检查权限的目的是什么

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

按原样操作,并添加相应的
@SuppressLint
注释以抑制警告。Android Studio中应该有一个快速修复程序,它将使用正确的属性添加
@SuppressLint

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