См. Запрашиваемое разрешение напрямую соответствует падению приложения, если служба запрашивается, а разрешение недоступно.Я бы предпочел поместить разрешение в onResume, потому что независимо от того, какие действия пользователя происходят, например, сворачивание или диалог разряда батареи появляется в верхней части экрана, нам нужно снова проверить изменения разрешений, чтобы изменения вашей активности могли происходить по каким-либо причинам.Либо камера пытается открыть после запроса сети, либо в какой ситуации.
Поместите разрешение проверки камеры в onResume.
Итак, давайте поговорим о том, как бы вы это сделали.Есть ряд восприятий.Я предпочитаю создать класс Helper , который позволил бы мне узнать статус разрешения с этим кодом
class PermissionsHelper(activity: Activity) {
private val activity: Context
init { this.activity = activity }
fun isCameraPermissionAvailable()=ActivityCompat.checkSelfPermission(activity, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED
}
}
Так что в методе onResume вашей активности проверьте, доступно ли разрешение, иначе запросите разрешение.
override fun onResume() {
super.onResume()
if (!PermissionsHelper(this).isCameraPermissionAvailable()) {
requestPermissions(arrayOf(Manifest.permission.CAMERA), CAMERA_REQUEST_CODE)
}
}
Также обратите внимание на два пункта
1) You should write permission for camera in manifeast so that app can request the permission
2) Check if the camera permission is available or not before opening the camera, if not you should again request for the permission
(так же, какв стадии восстановления)