Mobil geliştirmede kamera: nedir, API türleri ve nasıl kullanılır

Yazar: IT Sectr Yayınlanma: 2026-03-22 Okuma süresi: 8 dk

Mobil uygulamalarda kamera, görüntü ve video yakalamak için sistem API'leri aracılığıyla geliştiricinin erişebildiği bir donanım modülüdür. Google Android Developers (2025)'a göre, CameraX, kamera işlevselliği gerektiren Android uygulamalarının %85'inden fazlasında kullanılmaktadır. iOS'ta AVFoundation ve Android'de CameraX, donanım yönetiminin karmaşıklığını gizleyen üst düzey arayüzler sağlar.

Önemli Noktalar

  • Mobil uygulamalarda kamera sistem API'leri aracılığıyla yönetilir: Android'de CameraX ve Camera2, iOS'ta AVFoundation.
  • CameraX, yaşam döngüsü desteğine sahip modern bir Jetpack kütüphanesidir ve Android cihazların %95'ini destekler.
  • AVFoundation, Exposure, ISO ve Focus ayarlarıyla video ve fotoğraf çekmek için bir iOS framework'üdür.
  • Kameraya erişim izinleri her iki platformda da zorunludur ve sistem diyalogları aracılığıyla istenir.
  • Kameranın performansı cihazın donanım yeteneklerine ve işletim sistemi sürümüne bağlıdır.

Mobil uygulamalarda kamera nedir

Bir mobil kamera, bir mercek, görüntü sensörü ve görüntü sinyal işlemcisinden (ISP) oluşan entegre bir optik modüldür. Geliştirici, özel framework'ler kullanarak işletim sistemi aracılığıyla kameraya erişir. Android'de bunlar Camera2 API (düşük seviye) ve CameraX (yüksek seviye, Camera2 tabanlı), iOS'ta ise AVFoundation ve basit senaryolar için UIKit'tir. Her platform kendi araç setini sağlar, ancak genel konsept aynıdır: uygulama bir yakalama oturumu başlatır, parametreleri (çözünürlük, odak, pozlama) yapılandırır ve bir kare akışı veya ayrı görüntüler alır.

Modern kameraların donanım yetenekleri

Modern mobil kameralar birçok çekim modunu destekler: HDR, gece modu, arka plan bulanıklığı olan portre, ağır çekim video ve RAW formatında kayıt. Geliştiricinin yazılım ayarlarına erişimi vardır: ISO (sensör hassasiyeti), enstantane hızı (pozlama), beyaz dengesi, odak (otomatik ve manuel) ve görüntü sabitleme. Amiral gemisi cihazlarda farklı odak uzunluklarına sahip 4 adede kadar kamera bulunabilir ve uygulama kimliğe göre belirli bir kamerayı seçebilir.

Kamera ile çalışmak için API türleri

Mobil platformlar, kamera ile çalışmak için soyutlama seviyesi ve işlevsellik açısından farklılık gösteren çeşitli API'ler sunar. Belirli bir API'nin seçimi proje gereksinimlerine bağlıdır: basit fotoğraf çekimi için CameraX veya UIImagePickerController yeterlidir; profesyonel uygulamalar için doğrudan sensör kontrollü Camera2 veya AVFoundation gerekir. Aşağıda ana API'lerin bir karşılaştırması bulunmaktadır.

APIPlatformSeviyeÖzellikler
CameraXAndroidYüksekYaşam döngüsü bilincinde, %95 cihaz
Camera2AndroidDüşükTam kontrol, RAW, Seri çekim
AVFoundationiOSOrtaTam yakalama kontrolü
UIKit (UIImagePickerController)iOSYüksekHazır arayüz, özelleştirme yok

CameraX ne zaman seçilmeli

CameraX, derin özelleştirme gerektirmeden kameraya ihtiyaç duyan çoğu Android uygulaması için en uygun seçimdir. Kütüphane, Activity ve Fragment yaşam döngüsünü otomatik olarak yönetir, izinleri destekler ve farklı Android sürümleri arasında uyumluluk sağlar. CameraX, uyumluluk katmanı sayesinde Android cihazların %95'inde tutarlı davranış garantisi verir. Kamera önizlemesi (Preview), fotoğraf yakalama (ImageCapture) veya kare analizi (ImageAnalysis) gerekiyorsa — CameraX karmaşık kod yazmadan üç senaryoyu da yönetir.

Camera2 ne zaman seçilmeli

Camera2, profesyonel senaryolar için düşük seviyeli bir API'dir: RAW kaydı, manuel pozlama ayarı, seri çekim ve birden fazla kameranın eşzamanlı kontrolü. Camera2, geliştiricinin görüntü yakalama hattı, StateMachine yönetimi ve geri arama işleme konusunda derin bir anlayışa sahip olmasını gerektirir. Camera2'yi yalnızca CameraX gereksinimleri karşılamadığında kullanın: örneğin, manuel odaklamalı belge tarama uygulamaları veya standart olmayan çözünürlüklü özel kameralar.

Kamera izinlerinin istenmesi

Kameraya erişim, her iki platformda da kullanıcının açık iznini gerektirir. Android'de, CAMERA izni manifestoya eklenir ve Android 6.0'dan itibaren, iznin çalışma zamanında ActivityCompat.requestPermissions aracılığıyla da istenmesi gerekir. iOS'ta, Info.plist'e kameranın kullanım nedeninin açıklamasıyla birlikte NSCameraUsageDescription anahtarı eklenir. Bu açıklama olmadan, uygulama kameraya erişmeye çalıştığında çökecektir. iOS 14'ten itibaren, izin diyaloğu yalnızca uygulama adını değil, belirtilen nedeni de gösterir — ifade kullanıcı için anlaşılır olmalıdır.

CameraX ile Android'de uygulama

CameraX, kamera ile çalışmayı yalnızca birkaç satır koda indirger. Bir önizleme başlatmak için bir Preview örneği oluşturmanız, bunu bir LifecycleOwner'a bağlamanız ve görüntüleme için bir SurfaceProvider almanız gerekir. Fotoğraf yakalama için bir kaydetme hedefiyle ImageCapture kullanılır. Aşağıda Kotlin'de CameraX kullanarak kamerayı başlatma ve fotoğraf çekmenin tam bir örneği bulunmaktadır.

Preview ve ImageCapture kurulumu

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", "Bağlama başarısız", e)
    }
}, ContextCompact.getMainExecutor(this))

bindToLifecycle yöntemi, kamerayı Activity'nin yaşam döngüsüne bağlar — ekran döndüğünde veya uygulama arka plana geçtiğinde, kamera otomatik olarak serbest bırakılır. CameraSelector.DEFAULT_BACK_CAMERA arka kamerayı seçer; ön kamera için DEFAULT_FRONT_CAMERA kullanılır. Bağlamadan sonra Preview, PreviewView'de kamera akışını göstermeye başlar ve kullanıcı ekranda kamera görüntüsünü görür.

Fotoğraf çekme

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", "Yakalama hatası", exception)
        }
    }
)

takePicture yöntemi, kameradan bir kare yakalar ve bir dosyaya kaydeder. OutputFileOptions, File, ContentResolver ve MediaStore'a yazmayı destekler. onImageSaved geri aramasında, uygulama başarılı kaydetme bildirimi alır ve kullanıcı arayüzünü güncelleyebilir. CAPTURE_MODE_MINIMIZE_LATENCY, son işlemeyi azaltarak maksimum enstantane hızı sağlar.

AVFoundation ile iOS'ta uygulama

iOS'ta kameraya erişim, AVFoundation framework'ü tarafından AVCaptureSession sınıfı aracılığıyla sağlanır. Geliştirici bir yakalama oturumu oluşturur, gerekli girişleri (AVCaptureDeviceInput) ve çıkışları (AVCapturePhotoOutput, AVCaptureVideoDataOutput) ekler ve oturumu başlatır. Önizlemeyi görüntülemek için AVCaptureVideoPreviewLayer kullanılır. Aşağıda Swift'te fotoğraf yakalama için bir oturum kurulumu örneği bulunmaktadır.

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, fotoğraflar için en uygun çözünürlüğü ayarlar (modern cihazlarda genellikle 12 MP). Giriş, cihazın kamerası için oluşturulan bir AVCaptureDeviceInput'dur. Giriş ve çıkış eklendikten sonra, oturum startRunning aracılığıyla bir arka plan iş parçacığında başlatılır — eski cihazlarda oturum başlatma 200 ms'ye kadar sürebilir. Fotoğraf çekmek için capturePhoto(with:delegate:) çağrılır ve sonuç AVCapturePhotoCaptureDelegate aracılığıyla döndürülür.

Özellikler ve sınırlamalar

Mobil cihazlarda kamera ile çalışırken donanım sınırlamaları dikkate alınmalıdır: uzun süreli kayıt sırasında cihazın ısınması, yüksek çözünürlükte çalışırken pil tüketimi ve farklı cihazlarda değişen kamera kalitesi. Android'de, ekosistem parçalanması, aynı CameraX yapılandırmasının farklı modellerde farklı davranabileceği anlamına gelir. iOS'ta sınırlamalar esas olarak lisanslama ile ilgilidir: kamerayı arka planda kullanmak Apple'dan özel izin gerektirir. Simülatörlerin gerçek bir kameraya erişimi olmadığını da unutmamak önemlidir — test yalnızca fiziksel bir cihazda mümkündür.

Farklı işletim sistemi sürümleriyle uyumluluk

CameraX, CameraXConfig uyumluluk katmanı aracılığıyla Android parçalanma sorununu çözer — kütüphane, bilinen üretici hataları için otomatik olarak geçici çözümler uygular. iOS'ta, AVFoundation iOS 6'dan itibaren tüm cihazlarda tutarlı bir şekilde çalışır, ancak bazı özellikler (Portre Modu veya LiDAR gibi) yalnızca iPhone 12 ve daha yeni modellerde kullanılabilir. Platformlar arası bir uygulama geliştirirken, kamera eklentileriyle Flutter veya React Native kullanılması önerilir — bunlar platform farklılıklarını soyutlar ve her iki işletim sistemi için birleşik bir API sağlar.

Sıkça sorulan sorular

Android'de hangi kamera API'sini seçmek en iyisidir?

Çoğu uygulama için, kullanım kolaylığı, yerleşik yaşam döngüsü yönetimi ve cihazların %95'iyle uyumluluğu nedeniyle CameraX önerilir. Camera2 yalnızca RAW, seri çekim veya manuel sensör kontrolü gerektiğinde seçilmelidir.

Kamera erişim izni nasıl istenir?

Android'de, manifestoya CAMERA iznini ekleyin ve çalışma zamanında ActivityCompat.requestPermissions aracılığıyla isteyin. iOS'ta, kameranın kullanım nedeninin açık bir açıklamasıyla Info.plist'e NSCameraUsageDescription ekleyin.

Kamera arka planda kullanılabilir mi?

iOS'ta, kameranın arka planda kullanımı kesinlikle sınırlıdır — Apple'dan özel izin gerekir. Android'de, kamera bir ön plan hizmeti aracılığıyla arka planda çalışabilir, ancak bu pil ömrünü ve cihazın ısınmasını olumsuz etkiler.

Kamera simülatörde neden çalışmıyor?

iOS simülatörleri ve Android öykünücüleri donanım kamerasına erişemez — fiziksel bir sensörü öykünmezler. Kamera işlevselliğini test etmek için her zaman fiziksel bir cihaz veya bilgisayara bağlı harici bir kamera kullanın.

CameraX ImageAnalysis nedir?

ImageAnalysis, CameraX'ten gelen ve her kareyi işleme için ImageAnalysis.Analyzer'a ileten bir kare akışı analizörüdür. QR kodu tanıma, yüz algılama, belge tarama ve diğer bilgisayarlı görü görevleri için kullanılır.

Özet

  • Mobil uygulamalarda kamera CameraX/Camera2 (Android) ve AVFoundation (iOS) aracılığıyla yönetilir.
  • CameraX, yaşam döngüsü desteği ve Android cihazların %95'iyle uyumluluğa sahip üst düzey bir Jetpack kütüphanesidir.
  • AVFoundation, iOS'ta esnek görüntü ve video yakalama kontrolü için AVCaptureSession sağlar.
  • İzinler her iki platformda da zorunludur — Android'de CAMERA, iOS'ta NSCameraUsageDescription.
  • Camera2 profesyonel senaryolar için düşük seviyeli bir API'dir: RAW, manuel ayarlar, seri çekim.
  • Sınırlamalar — cihaz ısınması, Android parçalanması, simülatörlerde kamera öykünmesinin olmaması.
  • Öneri — Android'de CameraX ve iOS'ta AVFoundation ile başlayın, yalnızca gerektiğinde Camera2'ye geçin.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun