Camera Permission, bir mobil uygulamanın cihaz kamerasına erişmek için kullanıcıdan istediği izindir. Bu izin olmadan uygulama fotoğraf çekemez, QR kod tarayamaz veya görüntülü arama başlatamaz. Android Developers, 2024’e göre, Android 6.0 ve üzerinde kamerayı kullanan tüm uygulamalar, bir sistem diyaloğu aracılığıyla çalışma zamanında izin istemek zorundadır.
Önemli Noktalar
Camera Permission, uygulamaların mobil cihaz kamerasına erişimini düzenleyen bir sistem iznidir. Mobil platformlar, kamerayı hassas bir kaynak olarak kabul eder çünkü gerçek zamanlı olarak video kaydetmeye ve kullanıcının çevresini fotoğraflamaya olanak tanır.
Android’de CAMERA izni, tehlikeli izinler (dangerous permissions) kategorisine girer ve zorunlu bir çalışma zamanı talebi gerektirir. iOS’ta, kameraya erişen her uygulama için Info.plist’e NSCameraUsageDescription anahtarını eklemek zorunlu bir koşuldur. Bu anahtar olmadan, uygulama kamerayı açmaya çalıştığında çökecektir.
Statista (2024) araştırmasına göre, ilk 100 App Store uygulamasının yaklaşık %68’i kamerayı bir şekilde kullanmaktadır: QR kod taramadan tam fotoğraf ve video çekimine kadar. Aynı zamanda, kullanıcıların %37’si, uygulamanın bu izne neden ihtiyaç duyduğunu anlamazlarsa kamera erişimini reddeder.
Android’de Camera Permission, manifest dosyasında bir bildirim ve ardından çalışma zamanı talebi ile istenir. Android 6.0’dan itibaren CAMERA izni yalnızca yükleme aşamasında alınamaz — kullanıcının erişimi açıkça onaylaması gerekir.
Android’de kamerayı kullanmak için manifest dosyasına ilgili bildirimi eklemeniz gerekir. Bu olmadan, sistem çalışma zamanı talebi olsa bile uygulamanın kamerayı açmasına izin vermez.
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
uses-feature için android:required=false özelliği, uygulamanın kamerasız cihazlara kurulmasına izin verir. Bu, kameranın tüm uygulama işleyişi için zorunlu bir bileşen olmaması durumunda önemlidir.
Camera Permission talebi, Activity Result API aracılığıyla gerçekleştirilir. Yanıt alındıktan sonra uygulama durumu kontrol eder ve kamerayı başlatır veya bir açıklama gösterir.
private val cameraLauncher =
registerForActivityResult(ActivityResultContracts.TakePicture()) { success ->
if (success) {
// Fotoğraf kaydedildi
showPhoto(photoUri)
}
}
private val permissionLauncher =
registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->
if (granted) {
openCamera()
} else {
showPermissionDenied()
}
}
fun capturePhoto() {
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
openCamera()
} else {
permissionLauncher.launch(Manifest.permission.CAMERA)
}
}
Android 11’den itibaren, kullanıcı kamera erişimini iki kez reddederse, sistem diyaloğu artık gösterilmez. Never Ask Again bayrağı otomatik olarak ayarlanır ve uygulama yalnızca Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) aracılığıyla kullanıcıyı sistem ayarlarına yönlendirebilir. Geliştirici, zamanında bir ön açıklama ekranı göstermek için shouldShowRequestPermissionRationale kontrolünü eklemelidir.
iOS’ta Camera Permission, Info.plist’teki NSCameraUsageDescription anahtarı ve AVCaptureDevice.requestAccess çağrısı aracılığıyla yönetilir. Apple, talebin gerekçesini sıkı bir şekilde denetler: uygulama kamerayı kullanıcı için açık olmayan bir şekilde kullanırsa, App Store uygulamayı reddedebilir.
iOS’ta kamera erişimi için zorunlu bir koşul, Info.plist dosyasına NSCameraUsageDescription anahtarını eklemektir. Değer dizesi, sistem diyaloğunda talebin nedeni olarak görüntülenecektir.
<key>NSCameraUsageDescription</key>
<string>Profil fotoğrafları oluşturmak ve QR kodları taramak için uygulamanın kamera erişimine ihtiyacı var.</string>
Swift’te talep, statik yöntem AVCaptureDevice.requestAccess aracılığıyla gerçekleştirilir. Yanıt alındıktan sonra uygulama durumu işler ve yakalama oturumunu başlatır.
import AVFoundation
func requestCameraAccess() {
AVCaptureDevice.requestAccess(for: .video) { granted in
DispatchQueue.main.async {
if granted {
self.setupCameraSession()
} else {
self.showSettingsAlert()
}
}
}
}
private func setupCameraSession() {
guard let device = AVCaptureDevice.default(.for: .video)
else { return }
do {
let input = try AVCaptureDeviceInput(device: device)
let session = AVCaptureSession()
session.addInput(input)
session.startRunning()
} catch {
print("Camera error: \(error)")
}
}
Kamera erişimi talep etmeden önce, AVCaptureDevice.authorizationStatus(for: .video) aracılığıyla mevcut yetkilendirme durumunun kontrol edilmesi önerilir. Bu, gereksiz sistem diyaloğu çağrılarını önler ve kullanıcının zaten bir karar verdiği durumları doğru şekilde ele alır. Durum .notDetermined, .restricted, .denied veya .authorized olabilir.
Camera Permission, basit taramadan tam video çekimine kadar çeşitli senaryolarda uygulanır. Her senaryonun uygulama ve izin yönetimi için kendi gereksinimleri vardır.
iOS’ta, QR kod taraması için AVFoundation framework’ünden AVCaptureMetadataOutput kullanılır ve bu Camera Permission gerektirir. Android’de Google’ın ML Kit Barkod Taraması’nı kullanmanız önerilir. QR kod taramasının bir görüntü analiz kütüphanesi değil, kameranın kendisini kullandığını unutmamak önemlidir — bu nedenle Camera Permission zorunludur.
Standart fotoğraf veya video çekimi, hem iOS hem de Android’de Camera Permission gerektirir. Android’de, sistem kamera uygulamasını açan Intent(MediaStore.ACTION_IMAGE_CAPTURE) kullanabilirsiniz — bu durumda izni sistem uygulaması ister, sizin uygulamanız değil. Ancak, uygulama içi kamera önizlemesi (CameraX, Camera2 API) için kendi izniniz gereklidir.
Görüntülü arama uygulamaları (Zoom, Google Meet) ve artırılmış gerçeklik uygulamaları (ARCore, ARKit), ön veya arka kameradan video yakalamak için Camera Permission talep eder. Bu durumda, talep özellikle dikkatli açıklanmalıdır, çünkü kullanıcı bir AR mobilya deneme uygulamasının kamera talep edeceğini beklemeyebilir.
iOS’ta kamera ile çalışırken, AVCaptureDeviceInput ve AVCapturePhotoOutput aracılığıyla yakalama parametrelerini yapılandırabilirsiniz. Android’de CameraX, ImageCapture, VideoCapture ve Preview geri çağrıları aracılığıyla yapılandırmayı basitleştirir. Her ayar için istenen çözünürlük, yakınlaştırma seviyesi ve odak modu belirtmeniz gerekir. Doğru yakalama yapılandırmasını seçmek, uygulama performansını ve pil tüketimini doğrudan etkiler.
Kamera ile çalışırken çeşitli hatalar oluşabilir. Kamera başka bir uygulama tarafından kullanılıyor olabilir, sistem gizlilik ayarlarında devre dışı bırakılmış olabilir veya cihazda bulunmayabilir. Android’de, CameraManager.openCamera çağrılırken CameraAccessException işlenmesi önerilir. iOS’ta, AVCaptureDevice.authorizationStatus kontrol edin ve kullanıcıya erişimi etkinleştirmek için ayarlara gitmeyi teklif ederek reddetmeyi doğru şekilde ele alın. PackageManager.hasSystemFeature kullanarak izin talebinden önce cihazda kameranın mevcut olup olmadığını her zaman kontrol edin. Bu tür bir kontrol, kamerasız cihazlarda gereksiz talepleri önler ve kullanıcı deneyimini iyileştirir.
Performans optimizasyonu, kamera ile çalışırken uygulamanın sorunsuz çalışması için önemlidir. Yüksek çözünürlükte video yakalamak, önemli miktarda CPU ve pil kaynağı tüketir.
iOS’ta, uygulama 4K çekim gerektirmiyorsa maksimum çözünürlük yerine AVCaptureSessionPresetMedium kullanın. Android’de CameraX, ImageCaptureConfig.Builder aracılığıyla hedef çözünürlükle ImageCapture yapılandırmanıza olanak tanır. Uygulama arka plana geçtiğinde kamerayı serbest bırakmak ve geri döndüğünde yeniden almak da önemlidir. Bu, pil ömrünü korumak için Google ve Apple tarafından önerilen standart bir uygulamadır.
En iyi uygulamalar, Camera Permission onay oranını artırmaya ve uygulamanın App Store veya Google Play tarafından reddedilmesini önlemeye yardımcı olur.
Sistem diyaloğunu göstermeden önce, kameranın nasıl kullanılacağına dair bir örnek içeren bir ekran gösterin: bir tarama arayüzü görüntüsü, bir profil fotoğrafı çerçevesi, tanınmış bir QR kod örneği. Görsel açıklama, metinsel açıklamadan daha iyi çalışır. UX Movement (2024)’e göre, görsel bir önizleme eklemek onay dönüşümünü %72’ye yükseltir.
Uygulamanın ilk açılışında asla Camera Permission talep etmeyin. Uygulamayı yeni açmış bir kullanıcı, bağlamı anlamazsa büyük olasılıkla reddedecektir. Erişimi yalnızca kullanıcı kamerayı gerektiren bir düğmeye bastığında talep edin: “Profil Fotoğrafı Çek”, “Kodu Tara”, “Görüntülü Arama Başlat”. Bir bağlamsal tetikleyici, talebi daha anlamlı hale getirir.
Kullanıcı Camera Permission‑ı reddederse, eylemi gerçekleştirmek için alternatif bir yol sunun: galeriden fotoğraf seçme, QR kod verilerini manuel olarak girme, cihazdan bir görüntü yükleme. Reddetme, uygulama işlevselliğini tamamen engellememelidir — bu, Google Play ve App Store tasarım önerilerinin bir gerekliliğidir.
Sıkça Sorulan Sorular
Uygulama, izinsiz kamerayı açmaya çalıştığında çökerse bir hata alırsınız. Android’de checkSelfPermission veya iOS’ta authorizationStatus aracılığıyla durumu önceden kontrol etmeli ve alternatif bir senaryo sunmalısınız.
Evet, kamera aracılığıyla QR kod taraması Camera Permission gerektirir. Alternatif bir yaklaşım, kamera olmadan bir görüntüden QR kod tanıma kütüphaneleri kullanmaktır (örneğin, galeriden kodlu bir fotoğraf indirme), ancak bu Photo Library Permission gerektirir.
Jetpack Compose mimarisinde, bir composable işlevinde ActivityResultContracts.RequestPermission ile rememberLauncherForActivityResult kullanabilirsiniz. Kullanıcı arayüzü olmayan hizmetler için doğrudan izin talebi mümkün değildir — kontrol bir Activity’ye devredilmelidir.
En olası neden, Info.plist’te NSCameraUsageDescription anahtarının bulunmamasıdır. iOS 10’dan itibaren, bu anahtar olmadan AVCaptureDevice’a herhangi bir erişim, NSInvalidArgumentException istisnası ile çökmeye neden olur.
Android’de, Settings → Apps → [App] → Permissions aracılığıyla uygulama ayarlarını sıfırlayın. iOS’ta, Settings → [App] → Camera anahtarını kullanın. iOS’ta test otomasyonu için resetAuthorizationStatus ile XCUITest kullanabilirsiniz.
Özet
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.
Ayrıca okuyun