При использовании 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"/>