每次使用 Google Map API 时,我都会像下面这样添加与位置相关的内容,Android Studio 会不断显示错误:
private fun enableMyLocationOnMap() {
googleMap.setPadding(0, ViewUtils.dpToPx(48f), 0, 0)
googleMap.isMyLocationEnabled = true //<----ERROR
}
错误:调用需要可能被用户拒绝的权限:代码应显式检查权限是否可用(使用 checkPermission)或显式处理潜在的 SecurityException
我正在明确处理权限:
override fun onStart() {
super.onStart()
when {
PermissionUtils.isAccessFineLocationGranted(this) -> {
when {
PermissionUtils.isLocationEnable(this) -> {
setUpLocationListener()
}
else -> {
PermissionUtils.showGPSNotEnableDialog(this)
}
}
}
else -> {
PermissionUtils.requestAccessFineLocation(
this
, LOCATION_PERMISSION_REQUEST_CODE
)
}
}
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
when (requestCode) {
LOCATION_PERMISSION_REQUEST_CODE -> {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
when {
PermissionUtils.isLocationEnable(this) -> {
setUpLocationListener()
}
else -> {
PermissionUtils.showGPSNotEnableDialog(this)
}
}
} else {
Toast.makeText(this, "Location Permission not granted", Toast.LENGTH_LONG)
.show()
}
}
}
}
其中 PermissionUtils.kt :
object PermissionUtils {
fun requestAccessFineLocation(activity: AppCompatActivity, requestId: Int) {
ActivityCompat.requestPermissions(
activity,
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
requestId
)
}
fun isAccessFineLocationGranted(context: Context): Boolean {
return ContextCompat.checkSelfPermission(
context,
Manifest.permission.ACCESS_FINE_LOCATION
) == PackageManager.PERMISSION_GRANTED
}
fun isLocationEnable(context: Context): Boolean {
val locationManager: LocationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
|| locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
}
fun showGPSNotEnableDialog(context: Context) {
AlertDialog.Builder(context)
.setTitle(context.getString(R.string.enable_gps))
.setMessage(context.getString(R.string.required_for_this_app))
.setCancelable(false)
.setPositiveButton(context.getString(R.string.enable_now)) { _, _ ->
context.startActivity(Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS))
}
.show()
}
}
AndroidManifest.xml有:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
最佳答案
Android Studio 无法“看到”您在代码中的其他位置进行了检查。此外,理论上用户可以在您检查权限和使用权限之间撤销权限。
使用权限前需要直接进行检查。例如:
private fun enableMyLocationOnMap() {
if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
googleMap.setPadding(0, ViewUtils.dpToPx(48f), 0, 0)
googleMap.isMyLocationEnabled = true //<----ERROR
} else {
// request permission flow
}
}
关于Android Studio 不断显示缺少权限,即使我正在明确处理它。我如何解决它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63213971/