Для получения «опасных» разрешений (включая «Хранение», «Местоположение», «Камера», «Календарь» и т. Д.) Вам необходимо запросить у пользователя разрешение не при установке, а когда это необходимо.Важно проверять каждый раз, когда требуется разрешение, потому что пользователь может отозвать разрешение в любое время.
Чтобы проверить разрешение (в Kotlin) (в данном примере это FINE_LOCATION, измените его на любое разрешение, которое вам необходимо).request):
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED
) {
//if permission not granted, start function to request permission
//MY_PERMISSIONS_REQUEST is the requestCode, an int > 0
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
MY_PERMISSIONS_REQUEST
)
}
и затем переопределите функцию onRequestPermissionsResult:
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<String>, grantResults: IntArray
) {
when (requestCode) {
MY_PERMISSIONS_REQUEST -> {
// If request is cancelled, the result arrays are empty.
if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
//granted - you are not able to use Location Functionality
} else {
// permission denied
Toast.makeText(this, "Location Functionality Disabled.", Toast.LENGTH_LONG).show()
}
return
}
// Add other 'when' lines to check for other
// permissions this app might request.
else -> {
// Ignore all other requests.
}
}
}
Вы также можете запросить несколько разрешений одновременно. Android 6.0 несколько разрешений