ActivityResultLauncher возвращает дополнительное значение false для запроса разрешения

#android #android-permissions

Вопрос:

Я пытаюсь получить разрешение на камеру . Запускается следующий код onViewCreated . Моя проблема в том, что я хочу выйти из приложения только тогда, когда пользователь дважды отказал во всплывающем окне разрешения. но этот код, похоже, открывает всплывающее окно разрешений на переднем плане при закрытии приложения в фоновом режиме:

 
class PermissionsFragment(override val res: Int = R.layout.fragment_permission) : BaseFragment() {

    private var permissionRequest: ActivityResultLauncher<String>? = null


    override fun setup(v: View) {

        permissionRequest = registerForActivityResult(ActivityResultContracts.RequestPermission()) {
            when {
                it == true -> (activity as? CameraActivity)?.moveFromPermissionsToCamera()

                activity?.let { activity ->
                    ActivityCompat.shouldShowRequestPermissionRationale(activity, PERM_CAMERA)
                } == true -> {
                    ivLogo?.showSnackWithAction(
                        message = "This permission is required.please give us the permission",
                        actionText = "retry",
                        action = { permissionRequest?.launch(PERM_CAMERA) },
                    )
                }
                it == false -> activity?.finishWithToast("This app cannot run without Camera Permission")

            }
        }

        Handler(Looper.getMainLooper()).postDelayed(
            {
                permissionRequest?.launch(PERM_CAMERA, ActivityOptionsCompat.makeBasic())
            }
            ,3000)

    }


    companion object {
        const val PERM_CAMERA = Manifest.permission.CAMERA
    }
}
 

Я даже пытался задержать запрос, но происходит то же самое. чего я хочу, так это:

  1. открывается фрагмент. если разрешение недоступно, отобразите всплывающее окно. при наличии возможности измените фрагмент
  2. если всплывающее окно отображается, а пользователь один раз отклоняет, покажите панель закусок, чтобы снова запросить разрешение, если пользователь нажимает «Запретить» при появлении второго всплывающего окна, закройте приложение (это поведение для Android 10 , так как в Android 10/ оно автоматически навсегда отклоняет разрешение после второго отказа. для меньших версий мы можем показать закусочную несколько раз, но выйти из приложения, если в этом будет постоянно отказано)

Где я ошибаюсь? почему полученное разрешение выдает ложь при первом же звонке ? видео прилагается для лучшего объяснения