android - 是否可以显式检查 onRequestPermissionsResult 中的权限?
问题描述
我正在制作一个将地图添加到活动的 Android 应用程序,用户可以使用“位置图层”将地图与当前位置居中。在地图中添加位置按钮:
mMap.isMyLocationEnabled = true
我正在检查ACCESS_FINE_LOCATION
里面的许可onMapReady
,一切正常,但我需要完成活动并重新打开它以查看更改(位置按钮)。
所以,我onRequestPermissionsResult
用来检查用户响应,但是当我打电话给mMap.isMyLocationEnabled = true
Android 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
如果假设当前已授予,那么检查请求代码内部指令的许可的目的是什么?
解决方案
那么,如何在 onRequestPermissionsResult 中调用 mMap.isMyLocationEnabled = true?,
按照您的方式进行操作,并添加适当的@SuppressLint
注释以抑制警告。Android Studio 中应该有一个快速修复,它将添加@SuppressLint
正确的属性。
据推测,导致您的问题的 Lint 规则中存在一些错误或限制。例如,这是一个相对较旧的 Lint 检查,因此它可能无法正确处理所有 Kotlin 场景。
推荐阅读
- airflow - Airflow 中的多个 BashOperator 无法识别当前文件夹
- php - PHP mysql数据库两个请求同时在同一张表上
- mocha.js - afterEach 顶层描述
- java - 如何将文件名作为参数传递,创建然后读取文件
- android - 将 Firebase Analytics 安装到我的 React Native Android 版本时遇到问题
- apache-kafka - Spring Cloud Stream 与 Kafka Stream 的 Exactly Once 功能
- java - 在 android studio 上创建我的第一个 HelloWorld 应用程序的问题
- java - 使用 Mockito 进行 Spring Boot 服务层单元测试 - 模拟数据为空
- javascript - 如何从嵌套数组中获取字段值?
- c++ - 如何使用 GLM 设置鸟瞰相机?