Фрагменты имеют requestPermissions()
и onRequestPermissionsResult()
методы для запроса разрешений и получения результатов запроса на разрешение.
Вы используете следующий метод для запроса разрешений, который не является правильным
ActivityCompat.requestPermissions(
activity!!,
arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),
PermissionsRequestCode)
Вместо этого вы должны использовать следующее
requestPermissions(
arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),
PermissionsRequestCode);
Вы также должны скорректировать расположение некоторых из ваших условий, я исправил некоторые проблемы
class HomeFragment : Fragment() {
private val permissionsRequestCode = 123
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
activity?.let{
when{
permissionGranted() -> Log.e("granted--","granted")
shouldShowRationale() -> {}// Show the rationale UI and then request permission
else -> requestPermissions(arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),
permissionsRequestCode)
}
}
}
// this is called when user closes the permission request dialog
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<String>, grantResults: IntArray) {
if (requestCode == permissionsRequestCode) {
if (permissions[0] == Manifest.permission.READ_EXTERNAL_STORAGE &&
grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission is granted, do your work
}
}
}
private fun shouldShowRationale() = ActivityCompat.shouldShowRequestPermissionRationale(
activity!!,
Manifest.permission.READ_EXTERNAL_STORAGE)
private fun permissionGranted() = ContextCompat.checkSelfPermission(
activity!!,
Manifest.permission.READ_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
}