gpt4 book ai didi

android - 即使我明确处理了Android Studio,它仍会显示缺少权限。我如何解决它?

转载 作者:行者123 更新时间:2023-12-02 13:27:48 24 4
gpt4 key购买 nike

每次我添加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 - 即使我明确处理了Android Studio,它仍会显示缺少权限。我如何解决它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63213971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com