Android 11'de Kamera ile Çalışma — Pratik Bir Rehber
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.