Разрешение возвращается ложно, даже когда разрешено - PullRequest
0 голосов
/ 26 декабря 2018

Я проверяю, есть ли у моего приложения доступ к камере и для записи на внешнее хранилище, но в первый раз, когда меня спрашивают о разрешении, даже после того, как приложение получило их, приложение по-прежнему возвращает false, вот мой код

   private fun getPermission(): Boolean {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if( (checkSelfPermission(android.Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED )&&
            checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) ==PackageManager.PERMISSION_GRANTED) {
            return true
        } else {
            requestPermissions(listOf(CAMERA, WRITE_EXTERNAL_STORAGE).toTypedArray(), 1)

        }
    }
return false

}

поэтому, если я использую эту функцию getPermission, она в первый раз вернет false (на экране я разрешаю своему приложению доступ к камере и хранилищу) и в следующий раз (я вернусь к домашней активности и снова открою эту операцию с камерой) на этот разУ меня не запрашиваются разрешения, и мое приложение начинает использовать камеру.

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Как описано в ответе @Marko, все, чего мне не хватало, это обратный вызов onRequestPermissionsResult, вот код:

 //the is a overridden method
 override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
    if(requestCode==1){
        if(grantResults[0]==PERMISSION_DENIED && grantResults[1]== PERMISSION_DENIED){
            AlertDialogBox().createBuilder(this,"Permission","Camera and Storage permission denied","ok")
        }else if(grantResults[1]== PERMISSION_DENIED){
            AlertDialogBox().createBuilder(this,"Permission","Storage permission denied","ok")
        }else if(grantResults[0]== PERMISSION_DENIED){
            AlertDialogBox().createBuilder(this,"Permission","Camera permission denied","ok")
        }
    }
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)

}
0 голосов
/ 26 декабря 2018

Ваш вопрос прекрасно описывает указанное поведение.Метод requestPermissions приказывает системе:

  1. приостановить действие
  2. запустить системное действие, запрашивающее у пользователя разрешения
  3. возобновить действие
  4. вызовите его onRequestPermissionsResult callback

Вызов requestPermissions возвращается сразу после настройки этой процедуры на системной стороне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...