Mobil ishlab chiqishda kamera: bu nima, API turlari va qanday foydalanish

Muallif: IT Sectr Nashr etilgan: 2026-03-22 O'qish vaqti: 8 daq

Mobil ilovalardagi kamera — bu tizim API-lari orqali dasturchi uchun tasvir va video olish imkonini beradigan qurilmaning apparat modulidir. Google Android Developers (2025) ma'lumotlariga ko'ra, CameraX kamera bilan ishlashni talab qiluvchi Android ilovalarining 85% dan ortig'ida qo'llaniladi. iOS-da AVFoundation va Android-da CameraX apparat boshqaruvi murakkabligini yashiradigan yuqori darajali interfeyslarni taqdim etadi.

Asosiy ma'lumotlar

  • Kamera mobil ilovalarda tizim API-lari orqali boshqariladi: Android-da CameraX va Camera2, iOS-da AVFoundation.
  • CameraX — hayot sikliga ega zamonaviy Jetpack kutubxonasi, Android qurilmalarining 95% ini qo'llab-quvvatlaydi.
  • AVFoundation — Exposure, ISO va Focus sozlamalari bilan video va fotosurat olish uchun iOS frameworki.
  • Ruxsatnomalar kameraga kirish uchun ikkala platformada ham majburiy va tizim dialoglari orqali so'raladi.
  • Unumdorlik kamera qurilmaning apparat imkoniyatlari va OT versiyasiga bog'liq.

Mobil ilovalarda kamera nima

Mobil kamera — ob'ektiv, matritsa (sensor) va tasvirni qayta ishlash protsessoridan (ISP) iborat o'rnatilgan optik moduldir. Dasturchi kameraga maxsus frameworklar orqali operatsion tizim orqali kirishadi. Android-da bu Camera2 API (past darajali) va CameraX (Camera2 asosidagi yuqori darajali), iOS-da esa AVFoundation va oddiy stsenariylar uchun UIKit. Har bir platforma o'z vositalar to'plamini taqdim etadi, ammo umumiy kontseptsiya bir xil: ilova olish seansini ishga tushiradi, parametrlarni (rezolyutsiya, fokus, ekspozitsiya) sozlaydi va kadrlar oqimi yoki alohida tasvirlarni oladi.

Zamonaviy kameralarning apparat imkoniyatlari

Zamonaviy mobil kameralar ko'plab suratga olish rejimlarini qo'llab-quvvatlaydi: HDR, tungi rejim, fonni xiralashtirish bilan portret, sekin harakat va RAW formatida yozib olish. Dasturchi uchun dasturiy sozlamalar mavjud: ISO (matritsa sezgirligi), ekspozitsiya vaqti, oq balansi, fokus (avtomatik va qo'lda) va tasvir barqarorlashtirish. Flagman qurilmalarda turli fokus masofalariga ega 4 tagacha kamera mavjud va ilova ID bo'yicha ma'lum kamerani tanlashi mumkin.

Kamera bilan ishlash uchun API turlari

Mobil platformalarda abstraksiya darajasi va funksionalligi bilan farqlanuvchi bir nechta API mavjud. Muayyan API ni tanlash loyiha talablariga bog'liq: oddiy suratga olish uchun CameraX yoki UIImagePickerController yetarli, professional ilovalar uchun Camera2 yoki to'g'ridan-to'g'ri sensor boshqaruvi bilan AVFoundation kerak. Quyida asosiy API larning taqqoslanishi keltirilgan.

APIPlatformaDarajaXususiyatlar
CameraXAndroidYuqoriLifecycle-aware, 95% qurilmalar
Camera2AndroidPastTo'liq nazorat, RAW, Burst
AVFoundationiOSO'rtaTo'liq olish nazorati
UIKit (UIImagePickerController)iOSYuqoriTayyor UI, sozlash yo'q

Qachon CameraX ni tanlash kerak

CameraX — chuqur sozlashni talab qilmaydigan ko'pchilik Android ilovalari uchun eng yaxshi tanlovdir. Kutubxona avtomatik ravishda Activity va Fragment hayot siklini boshqaradi, ruxsatnomalar va turli Android versiyalari bilan moslikni qo'llab-quvvatlaydi. CameraX moslik qatlami tufayli Android qurilmalarining 95% ida bir xil ishlashni kafolatlaydi. Agar kamera oldi ko'rinishi (Preview), suratga olish (ImageCapture) yoki oqim tahlili (ImageAnalysis) kerak bo'lsa — CameraX murakkab kod yozmasdan uchala stsenariyni ham bajara oladi.

Qachon Camera2 ni tanlash kerak

Camera2 — professional stsenariylar uchun past darajali API: RAW da yozish, qo'lda ekspozitsiyani sozlash, portlatib suratga olish (burst), bir vaqtning o'zida bir nechta kameralarni boshqarish. Camera2 dasturchidan tasvir olish konveyerini, StateMachine ni boshqarishni va callback larni qayta ishlashni chuqur tushunishni talab qiladi. CameraX talablarni qoplamagan hollardagina Camera2 dan foydalaning: masalan, qo'lda fokuslash bilan hujjatlarni skanerlash ilovalari yoki nostandart rezolyutsiyali maxsus kameralar uchun.

Kameraga kirish ruxsatnomalarini so'rash

Kameraga kirish ikkala platformada ham foydalanuvchining aniq roziligini talab qiladi. Android da manifestga CAMERA ruxsatnomasi qo'shiladi va Android 6.0 dan boshlab ruxsatnomani ActivityCompat.requestPermissions orqali bajarish vaqtida so'rash kerak. iOS da Info.plist ga kameradan foydalanish sababining tavsifi bilan NSCameraUsageDescription kaliti qo'shiladi. Bu tavsifsiz ilova kameraga kirishga urinishda ishdan chiqadi. iOS 14 dan boshlab ruxsatnoma dialogida nafaqat ilova nomi, balki ko'rsatilgan sabab ham aks etadi — ifoda foydalanuvchi uchun tushunarli bo'lishi kerak.

Android-da CameraX bilan tatbiq

CameraX kamera bilan ishlashni bir necha qator kodga soddalashtiradi. Oldi ko'rinishni ishga tushirish uchun Preview namunasini yaratish, uni LifecycleOwner ga bog'lash va ko'rsatish uchun SurfaceProvider olish kerak. Suratga olish uchun saqlash maqsadi bilan ImageCapture ishlatiladi. Quyida Kotlin tilida CameraX orqali kamerani ishga tushirish va suratga olishning to'liq namunasi keltirilgan.

Preview va ImageCapture sozlamalari

kotlin
val preview = Preview.Builder()
    .build()
    .also {
        it.surfaceProvider = viewFinder.surfaceProvider
    }

val imageCapture = ImageCapture.Builder()
    .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
    .build()

val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener(Runnable {
    val cameraProvider = cameraProviderFuture.get()
    val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA

    try {
        cameraProvider.unbindAll()
        cameraProvider.bindToLifecycle(
            this, cameraSelector, preview, imageCapture
        )
    } catch (e: Exception) {
        Log.e("CameraX", "Bog'lash muvaffaqiyatsiz", e)
    }
}, ContextCompact.getMainExecutor(this))

bindToLifecycle metodi kamerani Activity hayot sikli bilan bog'laydi — ekran aylantirilganda yoki fon ga o'tganda kamera avtomatik ravishda bo'shatiladi. CameraSelector.DEFAULT_BACK_CAMERA orqa kamerani tanlaydi, old kamera uchun DEFAULT_FRONT_CAMERA ishlatiladi. Bog'lashdan so'ng Preview PreviewView da kameradan tasvirni ko'rsatishni boshlaydi va foydalanuvchi ekranda kamera tasvirini ko'radi.

Suratga olish

kotlin
val photoFile = File(
    externalMediaDirs.firstOrNull(),
    "IMG_${System.currentTimeMillis()}.jpg"
)
val outputOptions = ImageCapture.OutputFileOptions
    .Builder(photoFile)
    .build()

imageCapture.takePicture(
    outputOptions,
    ContextCompact.getMainExecutor(this),
    object : ImageCapture.OnImageSavedCallback {
        override fun onImageSaved(output: ImageCapture.OutputFileResults) {
            Log.d("CameraX", "Photo saved: ${photoFile.absolutePath}")
        }
        override fun onError(exception: ImageCaptureException) {
            Log.e("CameraX", "Olish xatosi", exception)
        }
    }
)

takePicture metodi kameradan kadr oladi va uni faylga saqlaydi. OutputFileOptions File, ContentResolver va MediaStore ga saqlashni qo'llab-quvvatlaydi. onImageSaved callbackida ilova muvaffaqiyatli saqlash haqida xabar oladi va UI ni yangilashi mumkin. CAPTURE_MODE_MINIMIZE_LATENCY qayta ishlashni kamaytirish orqali maksimal tortishish tezligini ta'minlaydi.

iOS-da AVFoundation bilan tatbiq

iOS da kameraga kirish AVFoundation frameworki tomonidan AVCaptureSession sinfi orqali ta'minlanadi. Dasturchi olish seansini yaratadi, kerakli kirishlarni (AVCaptureDeviceInput) va chiqishlarni (AVCapturePhotoOutput, AVCaptureVideoDataOutput) qo'shadi va seansni ishga tushiradi. Oldi ko'rinishni aks ettirish uchun AVCaptureVideoPreviewLayer ishlatiladi. Quyida Swift tilida suratga olish uchun seansni sozlash namunasi keltirilgan.

swift
import AVFoundation

let captureSession = AVCaptureSession()
captureSession.sessionPreset = .photo

guard let camera = AVCaptureDevice.default(
    for: .video
) else { return }

guard let input = try? AVCaptureDeviceInput(device: camera)
else { return }

let output = AVCapturePhotoOutput()
captureSession.addInput(input)
captureSession.addOutput(output)

DispatchQueue.global(qos: .userInitiated).async {
    captureSession.startRunning()
}

AVCaptureSessionPreset.photo surat uchun optimal rezolyutsiyani o'rnatadi (odatda zamonaviy qurilmalarda 12 MP). Kirish qurilma kamerasi uchun yaratilgan AVCaptureDeviceInput dir. Kirish va chiqish qo'shilgandan so'ng, seans startRunning orqali fon oqimida ishga tushiriladi — seansning ishga tushishi eski qurilmalarda 200 ms gacha davom etishi mumkin. Suratga olish uchun capturePhoto(with:delegate:) chaqiriladi va natija AVCapturePhotoCaptureDelegate orqali qaytariladi.

Xususiyatlar va cheklovlar

Kamera bilan mobil qurilmalarda ishlashda apparat cheklovlarini hisobga olish kerak: uzoq suratga olishda qurilmaning qizishi, yuqori rezolyutsiya bilan ishlashda batareyaning zaryadsizlanishi va turli qurilmalarda kameralarning har xil sifati. Android da ekotizimning parchalanishi bir xil CameraX konfiguratsiyasining turli modellarda har xil ishlashiga olib keladi. iOS da cheklovlar asosan litsenziyalashga tegishli: kameradan fonda foydalanish uchun Apple ning alohida ruxsati talab qilinadi. Shuningdek, simulyatorlar real kameraga ega emasligini yodda tutish muhim — sinov faqat jismoniy qurilmada mumkin.

Turli OT versiyalari bilan moslik

CameraX CameraXConfig moslik qatlami orqali Android parchalanishi muammosini hal qiladi — kutubxona ishlab chiqaruvchilarning ma'lum xatolari uchun avtomatik ravishda chetlab o'tish yo'llarini qo'llaydi. iOS da AVFoundation iOS 6 dan boshlab barcha qurilmalarda bir xil ishlaydi, ammo ba'zi funksiyalar (masalan, Portrait Mode yoki LiDAR) faqat iPhone 12 va undan yangi modellarda mavjud. Ko'p platformali ilova ishlab chiqishda Flutter yoki React Native dan kamera plaginlari bilan foydalanish tavsiya etiladi — ular platforma farqlarini abstraksiyalaydi va ikkala OT uchun yagona API ni ta'minlaydi.

Tez-tez so'raladigan savollar

Android da kamera uchun qaysi API ni tanlash kerak?

Aksariyat ilovalar uchun CameraX tavsiya etiladi — foydalanish qulayligi, o'rnatilgan hayot sikli boshqaruvi va 95% qurilmalar bilan moslik tufayli. Camera2 faqat RAW, portlatib suratga olish yoki qo'lda sensor boshqaruvi kerak bo'lganda tanlanishi kerak.

Kameraga kirish ruxsatnomasini qanday so'rash kerak?

Android da manifestga CAMERA ruxsatnomasini qo'shing va uni bajarish vaqtida ActivityCompat.requestPermissions orqali so'rang. iOS da Info.plist ga kameradan foydalanish sababining aniq tavsifi bilan NSCameraUsageDescription qo'shing.

Kameradan fonda foydalanish mumkinmi?

iOS da kameradan fonda foydalanish qattiq cheklangan — Apple ning alohida ruxsati talab qilinadi. Android da kamera foreground service orqali fonda ishlashi mumkin, ammo bu batareya darajasiga va qurilmaning qizishiga salbiy ta'sir qiladi.

Nega kamera simulyatorda ishlamaydi?

iOS simulyatorlari va Android emulyatorlari apparat kameraga kira olmaydi — ular jismoniy sensorni emulyatsiya qilmaydi. Kamera funksiyasini sinash uchun har doim jismoniy qurilma yoki kompyuterga ulangan tashqi kameradan foydalaning.

CameraX ImageAnalysis nima?

ImageAnalysis — CameraX dan kadr oqimining analizatori bo'lib, har bir kadrni qayta ishlash uchun ImageAnalysis.Analyzer ga uzatadi. QR kodlarni tanib olish, yuzlarni aniqlash, hujjatlarni skanerlash va boshqa kompyuter ko'rish vazifalari uchun ishlatiladi.

Xulosa

  • Kamera mobil ilovalarda CameraX/Camera2 (Android) va AVFoundation (iOS) orqali boshqariladi.
  • CameraX — hayot siklini qo'llab-quvvatlash va 95% Android qurilmalari bilan moslikni ta'minlovchi yuqori darajali Jetpack kutubxonasi.
  • AVFoundation iOS da tasvir va video olishni moslashuvchan boshqarish uchun AVCaptureSession ni ta'minlaydi.
  • Ruxsatnomalar ikkala platformada majburiy — Android da CAMERA, iOS da NSCameraUsageDescription.
  • Camera2 — professional stsenariylar uchun past darajali API: RAW, qo'lda sozlamalar, portlatib suratga olish.
  • Cheklovlar — qurilmaning qizishi, Android parchalanishi, simulyatorlarda kamera emulyatsiyasining yo'qligi.
  • Tavsiya — Android da CameraX va iOS da AVFoundation bilan boshlang, faqat zarurat bo'lganda Camera2 ga o'ting.

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.

Loyihani muhokama qilish

Shuningdek o'qing