Как проверить разрешение на фрагмент, используя mvvm в andorid - PullRequest
0 голосов
/ 26 января 2020

Я использую kotlin с MVVM. Я хочу проверить несколько разрешений во фрагменте. Я использовал приведенный ниже код. Это не показывает пермисию. Но у меня отключено разрешение, оно показывает не показывать. Вот мой код ..

class HomeFragment : Fragment() {
private val PermissionsRequestCode = 123

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    if (activity?.let {
            ContextCompat.checkSelfPermission(
                it,
                Manifest.permission.READ_EXTERNAL_STORAGE)
        }
        != PackageManager.PERMISSION_GRANTED) {

        // Should we show an explanation?
        if (activity?.let {
                ActivityCompat.shouldShowRequestPermissionRationale(
                    it,
                    Manifest.permission.READ_EXTERNAL_STORAGE)
            }!!) {


        } else {

            ActivityCompat.requestPermissions(
                activity!!,
                arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),
                PermissionsRequestCode)

        }
    } else {
        // Permission has already been granted
        Log.e("granted--","granted")
    }
  }
 }

Пожалуйста, помогите, как правильно обработать разрешение в фрагменте kotiln с помощью mvvm.

1 Ответ

0 голосов
/ 26 января 2020

Фрагменты имеют 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...