Camera Permission — bu mobil ilova foydalanuvchidan qurilma kamerasiga kirish uchun so'raydigan ruxsatdir. Usiz ilova suratga ololmaydi, QR kodlarni skanerlay olmaydi yoki video qo'ng'iroqlarni boshlay olmaydi. Android Developers, 2024 ma'lumotlariga ko'ra, Android 6.0 va undan yuqori versiyalarda kameradan foydalanadigan barcha ilovalar tizim dialogi orqali ruxsat so'rashlari shart.
Asosiy ma'lumotlar
Camera Permission — bu ilovalarning mobil qurilma kamerasiga kirishini tartibga soluvchi tizim ruxsatidir. Mobil platformalar kamerani maxfiy resurs deb hisoblaydi, chunki u foydalanuvchining atrof-muhitini real vaqtda video yozib olish va suratga olish imkonini beradi.
Android da CAMERA ruxsati xavfli ruxsatlar (dangerous permissions) toifasiga kiradi va majburiy so'rovni talab qiladi. iOS da Info.plist ga NSCameraUsageDescription kalitini qo'shish kameraga murojaat qiladigan har qanday ilova uchun majburiy shartdir. Ushbu kalitsiz ilova kamerani ochishga urinishda avariya bilan tugaydi.
Statista (2024) tadqiqotiga ko'ra, App Store ning top-100 dagi mobil ilovalarining taxminan 68 foizi u yoki bu shaklda kameradan foydalanadi: QR kodlarni skanerlashdan tortib to'laqonli foto va video suratga olishgacha. Shu bilan birga, foydalanuvchilarning 37 foizi ilovaga nima uchun bu ruxsat kerakligini tushunmasalar, kameraga kirishni rad etadilar.
Android da Camera Permission manifestdagi deklaratsiya va keyingi so'rov orqali so'raladi. Android 6.0 dan boshlab, CAMERA ruxsatini faqat o'rnatish bosqichida olish mumkin emas — foydalanuvchi kirishni aniq tasdiqlashi kerak.
Android da kameradan foydalanish uchun manifest fayliga tegishli deklaratsiyani qo'shish kerak. Usiz tizim so'rov bo'lsa ham ilovaga kamerani ochishga ruxsat bermaydi.
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
android:required=false atributi uses-feature uchun ilovani kamerasiz qurilmalarga o'rnatish imkonini beradi. Bu kamera butun ilovaning ishlashi uchun majburiy komponent bo'lmasa muhimdir.
Camera Permission so'rovi Activity Result API orqali amalga oshiriladi. Javob olingandan so'ng, ilova statusni tekshiradi va kamerani ishga tushiradi yoki tushuntirishni ko'rsatadi.
private val cameraLauncher =
registerForActivityResult(ActivityResultContracts.TakePicture()) { success ->
if (success) {
// Rasm saqlandi
showPhoto(photoUri)
}
}
private val permissionLauncher =
registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->
if (granted) {
openCamera()
} else {
showPermissionDenied()
}
}
fun capturePhoto() {
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
openCamera()
} else {
permissionLauncher.launch(Manifest.permission.CAMERA)
}
}
Android 11 dan boshlab, agar foydalanuvchi kameraga kirishni ikki marta rad etsa, tizim dialogi endi ko'rsatilmaydi. Never Ask Again bayrog'i avtomatik o'rnatiladi va ilova faqat Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) orqali foydalanuvchini tizim sozlamalariga yo'naltirishi mumkin. Dasturchi shouldShowRequestPermissionRationale tekshiruvini o'z vaqtida oldindan ekranni ko'rsatish uchun nazarda tutishi kerak.
iOS da Camera Permission Info.plist dagi NSCameraUsageDescription kaliti va AVCaptureDevice.requestAccess chaqiruvi orqali boshqariladi. Apple so'rovning asosliligini qattiq tekshiradi: agar ilova kameradan foydalanuvchi uchun kutilmagan tarzda foydalansa, App Store ilovani rad etishi mumkin.
iOS da kameraga kirish uchun majburiy shart Info.plist fayliga NSCameraUsageDescription kalitini qo'shishdir. Satr qiymati tizim dialogida so'rov sababi sifatida ko'rsatiladi.
<key>NSCameraUsageDescription</key>
<string>Ilovaga profil suratlari olish va QR kodlarni skanerlash uchun kameraga kirish kerak.</string>
Swift da so'rov AVCaptureDevice.requestAccess statik metodi orqali amalga oshiriladi. Javob olingandan so'ng, ilova statusni qayta ishlaydi va suratga olish sessiyasini ishga tushiradi.
import AVFoundation
func requestCameraAccess() {
AVCaptureDevice.requestAccess(for: .video) { granted in
DispatchQueue.main.async {
if granted {
self.setupCameraSession()
} else {
self.showSettingsAlert()
}
}
}
}
private func setupCameraSession() {
guard let device = AVCaptureDevice.default(.for: .video)
else { return }
do {
let input = try AVCaptureDeviceInput(device: device)
let session = AVCaptureSession()
session.addInput(input)
session.startRunning()
} catch {
print("Camera error: \(error)")
}
}
Kameraga kirish so'rovidan oldin AVCaptureDevice.authorizationStatus(for: .video) orqali joriy avtorizatsiya statusini tekshirish tavsiya etiladi. Bu keraksiz tizim dialogi chaqiruvini oldini olish va foydalanuvchi allaqachon qaror qilgan holatlarni to'g'ri qayta ishlash imkonini beradi. Status .notDetermined, .restricted, .denied yoki .authorized bo'lishi mumkin.
Camera Permission turli stsenariylarda qo'llaniladi, oddiy skanerdan to'laqonli video suratga olishgacha. Har bir stsenariy ruxsatlarni amalga oshirish va qayta ishlash uchun o'z talablarini qo'yadi.
iOS da QR kodlarni skanerlash uchun Camera Permission talab qiladigan AVFoundation freymvorkidan AVCaptureMetadataOutput ishlatiladi. Android da Google dan ML Kit Barcode Scanning dan foydalanish tavsiya etiladi. Shuni ta'kidlash kerakki, QR kodlarni skanerlash uchun aynan kamera ishlatiladi, tasvir tahlili kutubxonasi emas — shuning uchun Camera Permission majburiydir.
Standart suratga olish yoki video yozib olish iOS va Android da Camera Permission talab qiladi. Android da tizim kamera ilovasini ochadigan Intent(MediaStore.ACTION_IMAGE_CAPTURE) dan foydalanish mumkin — bu holda ruxsatni tizim ilovasi so'raydi, sizning ilovangiz emas. Biroq, ilova ichida kamerani oldindan ko'rish uchun (CameraX, Camera2 API) o'z ruxsati kerak.
Video qo'ng'iroq ilovalari (Zoom, Google Meet) va kengaytirilgan reallik (ARCore, ARKit) old yoki orqa kameradan video olish uchun Camera Permission so'raydi. Bu holda so'rov ayniqsa diqqat bilan tushuntirilishi kerak, chunki foydalanuvchi AR-kiyib ko'rish mebel ilovasi kamera so'raydi deb kutmagan bo'lishi mumkin.
iOS da kamera bilan ishlashda suratga olish parametrlarini AVCaptureDeviceInput va AVCapturePhotoOutput orqali sozlash mumkin. Android da CameraX ImageCapture, VideoCapture va Preview qayta chaqiruvlari orqali sozlashni soddalashtiradi. Har bir sozlash uchun kerakli rezolyutsiya, zoom darajasi va fokus rejimi ko'rsatilishi kerak. To'g'ri suratga olish sozlamasini tanlash to'g'ridan-to'g'ri ilova ishlashiga va batareya sarfiga ta'sir qiladi.
Kamera bilan ishlashda turli xatolar yuz berishi mumkin. Kamera boshqa ilova tomonidan band bo'lishi, tizim maxfiylik sozlamalarida o'chirilgan bo'lishi yoki qurilmada mavjud bo'lmasligi mumkin. Android da CameraManager.openCamera chaqiruvida CameraAccessException ni qayta ishlash tavsiya etiladi. iOS da AVCaptureDevice.authorizationStatus ni tekshirish va rad etishni to'g'ri qayta ishlash, foydalanuvchiga kirishni yoqish uchun sozlamalarga o'tishni taklif qilish kerak. Har doim ruxsat so'rashdan oldin PackageManager.hasSystemFeature orqali qurilmada kamera mavjudligini tekshiring. Bunday tekshiruv kamerasiz qurilmalarda keraksiz so'rovlarning oldini oladi va foydalanuvchi tajribasini yaxshilaydi.
Unumdorlikni optimallashtirish kamera bilan ishlashda ilovaning silliq ishlashi uchun muhimdir. Yuqori rezolyutsiyada video yozib olish protsessor va batareya resurslarini sezilarli darajada sarflaydi.
iOS da ilova 4K yozib olishni talab qilmasa, maksimal rezolyutsiya o'rniga AVCaptureSessionPresetMedium dan foydalaning. Android da CameraX ImageCaptureConfig.Builder orqali maqsadli rezolyutsiya bilan ImageCapture ni sozlash imkonini beradi. Shuningdek, ilova fon rejimiga o'tganda kamerani bo'shatish va qaytib kelganda uni qayta egallash muhimdir. Bu Google va Apple tomonidan batareyani tejash uchun tavsiya etilgan standart amaliyotdir.
Eng yaxshi amaliyotlar Camera Permission ma'qullash foizini oshirishga va App Store yoki Google Play tomonidan ilovani rad etilishining oldini olishga yordam beradi.
Tizim dialogini chaqirishdan oldin kameradan qanday foydalanish namunasi bilan ekranni ko'rsating: skanerlash interfeysi tasviri, profil surati uchun ramka, tanilgan QR kod namunasi. Vizual tushuntirish matnli tushuntirishdan yaxshiroq ishlaydi. UX Movement (2024) ma'lumotlariga ko'ra, vizual oldindan ko'rish qo'shilishi ma'qullash konversiyasini 72% gacha oshiradi.
Hech qachon Camera Permission ni ilovaning birinchi ishga tushirilishida so'ramang. Ilovani endi ochgan foydalanuvchi kontekstni tushunmasa, rad etishi ehtimoli ko'proq. Kirishni faqat foydalanuvchi kamera talab qiladigan tugmani bosgan paytda so'rang: «Profil suratini olish», «Kodni skanerlash», «Video qo'ng'iroqni boshlash». Kontekstual tetik so'rovning mazmunliligini oshiradi.
Agar foydalanuvchi Camera Permission ni rad etgan bo'lsa, harakatni bajarishning muqobil usulini taklif qiling: galereyadan surat tanlash, QR kod ma'lumotlarini qo'lda kiritish, qurilmadan rasm yuklash. Rad etish ilova funksionalligini to'liq bloklamasligi kerak — bu Google Play va App Store ning ilova dizayni bo'yicha tavsiyalari talabidir.
Tez-tez beriladigan savollar
Ruxsatsiz kamerani ochishga urinishda xato olasiz. Android da checkSelfPermission yoki iOS da authorizationStatus orqali oldindan statusni tekshirish va muqobil stsenariy taklif qilish kerak.
Ha, kamera orqali QR kodlarni skanerlash Camera Permission talab qiladi. Muqobil yondashuv — kamerasiiz rasmda QR kodni taniydigan kutubxonalardan foydalanish (masalan, galereyadan kodli rasmni yuklash), ammo bu Photo Library Permission talab qiladi.
Jetpack Compose arxitekturasida composable funksiyasida ActivityResultContracts.RequestPermission bilan rememberLauncherForActivityResult dan foydalanish mumkin. UI siz xizmatlar uchun to'g'ridan-to'g'ri ruxsat so'rovi mumkin emas — nazoratni Activity ga o'tkazish kerak.
Eng ehtimoliy sabab — Info.plist da NSCameraUsageDescription kalitining yo'qligi. iOS 10 dan boshlab, ushbu kalitsiz AVCaptureDevice ga har qanday murojaat NSInvalidArgumentException istisnosi bilan ilovaning ishdan chiqishiga olib keladi.
Android da ilova sozlamalarini Settings → Apps → [Ilova] → Ruxsatlar orqali tiklang. iOS da Settings → [Ilova] → Camera kalitidan foydalaning. iOS da testlarni avtomatlashtirish uchun XCUITest ni resetAuthorizationStatus bilan ishlatish mumkin.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.