是否可以明确检查 onRequestPermissionsResult 中的权限?
Is possible explicitly check for permissions inside a onRequestPermissionsResult?
我正在制作一个 Android 应用程序,可以将地图添加到 activity,用户可以使用 "location layer" 将地图以他们当前的位置为中心。在地图中添加位置按钮:
mMap.isMyLocationEnabled = true
我正在检查 onMapReady
方法中的 ACCESS_FINE_LOCATION
权限,一切正常,但我需要完成活动并重新打开它以查看更改(位置按钮)。
所以,我正在使用 onRequestPermissionsResult
检查用户响应,但是当我调用 mMap.isMyLocationEnabled = true
Android Studio 时说:
Call requires permisson which may be rejected by user: code shoud
explicitly check to see if permission is available (with
checkPermission) or explicitly handle a potencial 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()
}
}
}
}
那么,如何在 onRequestPermissionsResult
中调用 mMap.isMyLocationEnabled = true
?,
检查 when
指令中的权限以获取请求代码的目的是什么?
So, How can I call mMap.isMyLocationEnabled = true inside onRequestPermissionsResult?,
按照您的方式进行,并添加适当的 @SuppressLint
注释以抑制警告。在 Android Studio 中应该有一个快速修复,它将添加 @SuppressLint
和正确的 属性.
据推测,导致您出现问题的 Lint 规则中存在一些错误或限制。例如,这是一个相对较旧的 Lint 检查,因此它可能没有正确处理所有 Kotlin 场景。
我正在制作一个 Android 应用程序,可以将地图添加到 activity,用户可以使用 "location layer" 将地图以他们当前的位置为中心。在地图中添加位置按钮:
mMap.isMyLocationEnabled = true
我正在检查 onMapReady
方法中的 ACCESS_FINE_LOCATION
权限,一切正常,但我需要完成活动并重新打开它以查看更改(位置按钮)。
所以,我正在使用 onRequestPermissionsResult
检查用户响应,但是当我调用 mMap.isMyLocationEnabled = true
Android Studio 时说:
Call requires permisson which may be rejected by user: code shoud explicitly check to see if permission is available (with checkPermission) or explicitly handle a potencial 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()
}
}
}
}
那么,如何在 onRequestPermissionsResult
中调用 mMap.isMyLocationEnabled = true
?,
检查 when
指令中的权限以获取请求代码的目的是什么?
So, How can I call mMap.isMyLocationEnabled = true inside onRequestPermissionsResult?,
按照您的方式进行,并添加适当的 @SuppressLint
注释以抑制警告。在 Android Studio 中应该有一个快速修复,它将添加 @SuppressLint
和正确的 属性.
据推测,导致您出现问题的 Lint 规则中存在一些错误或限制。例如,这是一个相对较旧的 Lint 检查,因此它可能没有正确处理所有 Kotlin 场景。