Камера у мобилном развоју: шта је то, врсте API-ја и како користити

Аутор: IT Sectr Објављено: 2026-03-22 Време читања: 8 мин

Камера у мобилним апликацијама — хардверски модул уређаја доступан програмеру преко системских API-ја за снимање слика и видеа. Према Google Android Developers (2025), CameraX се користи у преко 85% апликација за Android које захтевају рад са камером. AVFoundation на iOS-у и CameraX на Android-у пружају високо нивоске интерфејсе који скривају сложеност хардверског управљања.

Главне тачке

  • Камера у мобилним апликацијама се управља преко системских API-ја: CameraX и Camera2 на Android-у, AVFoundation на iOS-у.
  • CameraX — модерна Jetpack библиотека са животним циклусом, подржава 95% Android уређаја.
  • AVFoundation — iOS framework за снимање видеа и фотографија са подешавањем Exposure, ISO и Focus.
  • Дозволе за приступ камери су обавезне на обе платформе и захтевају се путем системских дијалога.
  • Перформансе камере зависе од хардверских могућности уређаја и верзије оперативног система.

Шта је камера у мобилним апликацијама

Мобилна камера је уграђени оптички модул који се састоји од сочива, матрице (сензора) и процесора за обраду слике (ISP). Програмер добија приступ камери преко оперативног система помоћу посебних framework-а. На Android-у су то Camera2 API (нисконивоски) и CameraX (високо нивоски заснован на Camera2), на iOS-у — AVFoundation и UIKit за једноставне сценарије. Свака платформа пружа свој скуп алата, али општи концепт је исти: апликација иницијализује сесију снимања, подешава параметре (резолуција, фокус, експозиција) и прима ток кадрова или појединачне слике.

Хардверске могућности модерних камера

Модерне мобилне камере подржавају бројне режиме снимања: HDR, ноћни режим, портрет са замућењем позадине, успорени снимак и снимање у RAW формату. Програмеру су доступна софтверска подешавања: ISO (осетљивост матрице), време експозиције, баланс белог, фокус (аутоматски и ручни) и стабилизација слике. На водећим уређајима доступно је до 4 камере са различитим жижним даљинама, а апликација може да изабере одређену камеру по ID-ју.

Врсте API-ја за рад са камером

На мобилним платформама постоји неколико API-ја за рад са камером, који се разликују по нивоу апстракције и функционалности. Избор конкретног API-ја зависи од захтева пројекта: за једноставно снимање фотографија довољан је CameraX или UIImagePickerController, за професионалне апликације потребан је Camera2 или AVFoundation са директним управљањем сензором. Испод је дато поређење главних API-ја.

APIПлатформаНивоКарактеристике
CameraXAndroidВисокиLifecycle-aware, 95% уређаја
Camera2AndroidНискиПотпуна контрола, RAW, Burst
AVFoundationiOSСредњиПотпуна контрола снимања
UIKit (UIImagePickerController)iOSВисокиГотов UI, без прилагођавања

Када изабрати CameraX

CameraX — оптималан избор за већину Android апликација којима је потребна камера без дубинског прилагођавања. Библиотека аутоматски управља животним циклусом Activity и Fragment, подржава дозволе и компатибилност са различитим верзијама Android-а. CameraX гарантује исто понашање на 95% Android уређаја захваљујући слоју компатибилности. Ако је потребан преглед камере (Preview), снимање фотографија (ImageCapture) или анализа тока (ImageAnalysis) — CameraX се носи са сва три сценарија без писања сложеног кода.

Када изабрати Camera2

Camera2 — нисконивоски API за професионалне сценарије: снимање у RAW формату, ручно подешавање експозиције, рафално снимање (burst), истовремено управљање са више камера. Camera2 захтева од програмера дубоко разумевање конвејера за снимање слика, управљање StateMachine и обраду callback-ова. Користите Camera2 само ако CameraX не покрива захтеве: на пример, за апликације за скенирање докумената са ручним фокусом или прилагођене камере са нестандардном резолуцијом.

Захтевање дозвола за приступ камери

Приступ камери захтева изричиту сагласност корисника на обе платформе. На Android-у се у манифест додаје CAMERA дозвола, а од Android 6.0 потребно је захтевати дозволу током извршавања путем ActivityCompat.requestPermissions. На iOS-у се у Info.plist додаје кључ NSCameraUsageDescription са описом разлога коришћења камере. Без овог описа, апликација ће се срушити при покушају приступа камери. Од iOS 14 у дијалогу за дозволе приказује се не само назив апликације већ и наведени разлог — формулација треба да буде разумљива кориснику.

Имплементација на Android-у са CameraX

CameraX поједностављује рад са камером на неколико линија кода. За покретање прегледа потребно је креирати инстанцу Preview, повезати је са LifecycleOwner и добити SurfaceProvider за приказ. За снимање фотографија користи се ImageCapture са циљем чувања. Испод је дат комплетан пример покретања камере и снимања фотографија помоћу CameraX у Kotlin-у.

Подешавање Preview и ImageCapture

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", "Повезивање није успело", e)
    }
}, ContextCompact.getMainExecutor(this))

Метод bindToLifecycle повезује камеру са животним циклусом Activity — при ротацији екрана или одласку у позадину, камера се аутоматски ослобађа. CameraSelector.DEFAULT_BACK_CAMERA бира задњу камеру, за предњу се користи DEFAULT_FRONT_CAMERA. Након повезивања, Preview почиње да приказује слику са камере у PreviewView-у и корисник види слику са камере на екрану.

Снимање фотографије

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", "Грешка при снимању", exception)
        }
    }
)

Метод takePicture врши снимање кадра са камере и чува га у датотеку. OutputFileOptions подржава чување у File, ContentResolver и MediaStore. У callback-у onImageSaved, апликација добија обавештење о успешном чувању и може да ажурира UI. CAPTURE_MODE_MINIMIZE_LATENCY обезбеђује максималну брзину окидача смањењем пост-обраде.

Имплементација на iOS-у са AVFoundation

На iOS-у приступ камери обезбеђује framework AVFoundation кроз класу AVCaptureSession. Програмер креира сесију снимања, додаје потребне улазе (AVCaptureDeviceInput) и излазе (AVCapturePhotoOutput, AVCaptureVideoDataOutput) и покреће сесију. За приказ прегледа користи се AVCaptureVideoPreviewLayer. Испод је дат пример подешавања сесије за снимање фотографија у Swift-у.

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 поставља оптималну резолуцију за фотографију (обично 12 MP на модерним уређајима). Улаз је AVCaptureDeviceInput креиран за камеру уређаја. Након додавања улаза и излаза, сесија се покреће у позадинској нити путем startRunning — покретање сесије може трајати до 200 ms на старијим уређајима. За снимање фотографије позива се capturePhoto(with:delegate:), а резултат се враћа преко делегата AVCapturePhotoCaptureDelegate.

Карактеристике и ограничења

При раду са камером на мобилним уређајима потребно је узети у обзир хардверска ограничења: загревање уређаја при дугом снимању, пражњење батерије при раду са високом резолуцијом и различит квалитет камера на различитим уређајима. На Android-у фрагментација екосистема доводи до тога да иста CameraX конфигурација може другачије да ради на различитим моделима. На iOS-у ограничења се углавном односе на лиценцирање: коришћење камере у позадини захтева посебну дозволу Apple-а. Такође је важно запамтити да симулатори немају приступ правој камери — тестирање је могуће само на физичком уређају.

Компатибилност са различитим верзијама оперативног система

CameraX решава проблем фрагментације Android-а кроз слој компатибилности CameraXConfig — библиотека аутоматски примењује решења за познате грешке произвођача. На iOS-у AVFoundation ради јединствено на свим уређајима почев од iOS 6, али неке функције (нпр. Portrait Mode или LiDAR) доступне су само на моделима iPhone 12 и новијим. При развоју крос-платформске апликације препоручује се коришћење Flutter или React Native са додацима за камеру — они апстрахују разлике платформи и пружају јединствени API за оба оперативна система.

Често постављана питања

Који API за камеру је најбоље изабрати на Android-у?

За већину апликација препоручује се CameraX због једноставности коришћења, уграђене обраде животног циклуса и компатибилности са 95% уређаја. Camera2 треба изабрати само када је потребан RAW, рафално снимање или ручно управљање сензором.

Како затражити дозволу за приступ камери?

На Android-у додајте CAMERA дозволу у манифест и затражите је током извршавања путем ActivityCompat.requestPermissions. На iOS-у додајте NSCameraUsageDescription у Info.plist са јасним описом разлога коришћења камере.

Може ли се камера користити у позадини?

На iOS-у коришћење камере у позадини је строго ограничено — потребна је посебна дозвола Apple-а. На Android-у камера може да ради у позадини кроз foreground service, али то негативно утиче на трајање батерије и загревање уређаја.

Зашто камера не ради на симулатору?

iOS симулатори и Android емулатори немају приступ хардверској камери — они не емулирају физички сензор. За тестирање функционалности камере увек користите физички уређај или спољну камеру повезану са рачунаром.

Шта је CameraX ImageAnalysis?

ImageAnalysis — анализатор тока кадрова из CameraX-а који прослеђује сваки кадар ImageAnalysis.Analyzer-у за обраду. Користи се за препознавање QR кодова, детекцију лица, скенирање докумената и друге задатке компјутерског вида.

Закључак

  • Камера у мобилним апликацијама се управља преко CameraX/Camera2 (Android) и AVFoundation (iOS).
  • CameraX — високо нивоска Jetpack библиотека са подршком за животни циклус и компатибилношћу са 95% Android уређаја.
  • AVFoundation пружа AVCaptureSession за флексибилно управљање снимањем слика и видеа на iOS-у.
  • Дозволе су обавезне на обе платформе — CAMERA на Android-у, NSCameraUsageDescription на iOS-у.
  • Camera2 — нисконивоски API за професионалне сценарије: RAW, ручна подешавања, рафално снимање.
  • Ограничења — загревање уређаја, фрагментација Android-а, недостатак емулације камере у симулаторима.
  • Препорука — почните са CameraX на Android-у и AVFoundation на iOS-у, пређите на Camera2 само по потреби.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође