#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
}
}
Я даже пытался задержать запрос, но происходит то же самое. чего я хочу, так это:
- открывается фрагмент. если разрешение недоступно, отобразите всплывающее окно. при наличии возможности измените фрагмент
- если всплывающее окно отображается, а пользователь один раз отклоняет, покажите панель закусок, чтобы снова запросить разрешение, если пользователь нажимает «Запретить» при появлении второго всплывающего окна, закройте приложение (это поведение для Android 10 , так как в Android 10/ оно автоматически навсегда отклоняет разрешение после второго отказа. для меньших версий мы можем показать закусочную несколько раз, но выйти из приложения, если в этом будет постоянно отказано)
Где я ошибаюсь? почему полученное разрешение выдает ложь при первом же звонке ? видео прилагается для лучшего объяснения