Android 11'de Kamera ile Çalışma — Pratik Bir Rehber

Kerem Aydın·7 Temmuz 2026·⏱3 dk

Kısaca: Android 11 tek seferlik izinleri ve otomatik sıfırlamayı, eşzamanlı kamera kullanımını, hassas zoom özelliğini ve derinlik efektleri için platform API'lerini getiriyor; çoğu görev için CameraX'i kullanın, CameraCharacteristics/StreamConfigurationMap kontrollerini yapın ve tek seferlik/otomatik sıfırlama izinlerini yönetin.

Bilmeniz Gerekenler (Özet)

  • İzinler: "Yalnızca bu sefer" senaryolarını ve otomatik sıfırlamayı destekleyin — işlevsellik başlatıldığında CAMERA/RECORD_AUDIO izinlerini kontrol edin ve gerekirse yeniden isteyin. Kullanıcıya açıklama yapmak için shouldShowRequestPermissionRationale() kullanın.
  • Eşzamanlı kamera: Birden fazla kamerayı açmadan önce cihaz yeteneklerini getConcurrentCameraIds() ve SCALER_MANDATORY_CONCURRENT_STREAM_COMBINATIONS aracılığıyla kontrol edin; geri dönüş planı hazırlayın (çözünürlüğü düşürme).
  • Yeni API'ler: CONTROL_ZOOM_RATIO kayan noktalı zoom oranı sağlar; platform derinlik/bokeh iyileştirmeleri ekledi. Çoğu görev için hazır CameraX soyutlamalarını tercih edin, ince optimizasyonlar için Camera2/NDK kullanın.

"Uygulama uzun süre kullanılmadı" senaryolarını test edin — izinlerin otomatik sıfırlanması kullanıcılar arasında beklenmedik kamera erişim reddine neden olur.

Ayarlar, Formatlar ve Öneriler

  • Formatlar: Ön izleme ve analiz için YUV_420_888 (ImageReader); baytları okumanız gerekmiyorsa hız için PRIVATE surface kullanın. Fotoğraflar için varsayılan olarak JPEG; RAW/DNG formatlarını yalnızca cihaz RAW desteğine sahipse uygulayın (yetkinlikleri kontrol edin).
  • Çözünürlük seçimi: Ön izleme için kare hızına ve düşük gecikmeye öncelik verin (örneğin 720p/1080p), çekimler için ise işlemeyi yavaşlatmıyorsa mevcut en yüksek çözünürlüğü tercih edin. Otomatik seçim için StreamConfigurationMap.getOutputSizes() veya CameraX ResolutionSelector/Viewport kullanın.
  • Video: Varsayılan olarak H.264; HEVC'yi yalnızca cihazda garantili destek varsa kullanın. Yüksek çözünürlük/FPS sırasında termal kısıtlamayı unutmayın.
  • EXIF ve gizlilik: Fotoğrafları paylaşırken, alıcının konum izni yoksa geo-etiketlerin temizlenmesini dikkate alın.

Tüm cihazlarda RAW/Tam destek bulunduğunu varsaymayın — donanım seviyesini ve REQUEST_AVAILABLE_CAPABILITIES özelliklerini kontrol edin.

Projeye CameraX ile başlayın: Sorunların %80'ini çözer (döndürme, izinler, yaşam döngüsü). Yalnızca gerekli olduğunda Camera2/NDK'ye geçin.

Hata Ayıklama: Tipik Sorunlar ve Hazır Çözümler

  • Kamera açılmıyor / ERROR_MAX_CAMERAS_IN_USE
    Adımlar: CameraManager.AvailabilityCallback izlemesi yapın; onPause/onStop sırasında CameraDevice ve CaptureSession'ı her zaman kapatın; açmadan önce başka bir bileşenin kamerayı tutup tutmadığını kontrol edin. Çoklu kamera için kombinasyon desteğini getConcurrentCameraIds() ile kontrol edin.
  • Siyah ön izleme / donmuş ön izleme
    Kontroller: Surface boyutlarının ön izleme ile uyumu, StreamConfigurationMap üzerinden çıktı kombinasyonlarının uyumluluğu, bağlı Surface sayısının aşılmadığından emin olun. Çözüm: Uyumlu boyutlar seçin veya çıkışları sınırlayın.
  • Kare döndürme/aynalama sorunları
    Çözüm: SENSOR_ORIENTATION ve cihaz rotasyonunu dikkate alın; JPEG_ORIENTATION ayarlayın ve Ön İzleme için TargetRotation / PreviewView dönüşümü kullanın.
  • Tek seferlik izin / otomatik sıfırlama
    UX: Reddedilme durumunda gerekçe gösterin ve ayarlara gitme butonu sunun; tekrar başlatıldığında kamera kullanımı öncesinde izinleri otomatik olarak yeniden isteyin.
  • RAW yok / sınırlı Camera2 desteği
    Kontrol: CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES ve supportedHardwareLevel; geri dönüş olarak "Pro via JPEG" önerin.
  • Seri çekimde büyük gecikmeler / OOM (Bellek Taşması)
    Çözüm: Arka planda asenkron kayıt, aynı anda tutulan Image sayısını sınırlama (analiz için acquireLatestImage), PRIVATE surface kullanımı.

Sık Yapılan Hatalar

  • Activity durdurulduğunda CameraDevice/CaptureSession kapatılmaz — bu durum kameranın kilitlenmesine yol açar.
  • Tek seferlik ve otomatik sıfırlama izinleri göz ardı edilir — uygulama aniden erişimi kaybeder.
  • Yanlış çözünürlük seçimi — bazı cihazlarda siyah ön izlemeye veya çökmelere neden olur.
  • Desteklenen kombinasyonlar kontrol edilmeden aynı anda birden fazla kamera açılmaya çalışılır.

SSS

  • Her yerde RAW uygulamak gerekli mi?
    Yalnızca FULL destekli cihazları hedefliyorsanız; aksi takdirde uyumluluk için JPEG geri dönüşü sunun.
  • Cihazın eşzamanlı kamera desteğini hızlıca nasıl kontrol edebilirim?
    CameraManager.getConcurrentCameraIds() kullanın ve SCALER_MANDATORY_CONCURRENT_STREAM_COMBINATIONS değerlerini kontrol edin.
    CameraX mi yoksa Camera2 mi seçilmeli?
    Hızlı başlangıç ve standart kullanım durumları için CameraX; tam kontrol ve performans optimizasyonu gerektiğinde Camera2/NDK.

İsterseniz test kontrol listesi (manuel + otomatik) veya izin yönetimi ve geri dönüş mantığı içeren CameraX/Camera2 modül örneği hazırlayabilirim.