Camera Permission ist eine Berechtigung, die eine mobile App vom Benutzer anfordert, um auf die Gerätekamera zuzugreifen. Ohne sie kann die App keine Fotos aufnehmen, QR-Codes scannen oder Videoanrufe starten. Laut Android Developers, 2024, sind alle Apps, die die Kamera auf Android 6.0 und höher verwenden, verpflichtet, die Berechtigung zur Laufzeit über einen Systemdialog anzufordern.
Wichtige Punkte
Camera Permission ist eine Systemberechtigung, die den Zugriff von Apps auf die Kamera eines mobilen Geräts regelt. Mobile Plattformen betrachten die Kamera als sensible Ressource, da sie das Aufzeichnen von Videos und das Fotografieren der Umgebung des Benutzers in Echtzeit ermöglicht.
Unter Android gehört die CAMERA-Berechtigung zur Kategorie der gefährlichen Berechtigungen und erfordert eine obligatorische Laufzeitanforderung. Unter iOS ist das Hinzufügen des Schlüssels NSCameraUsageDescription in Info.plist eine obligatorische Voraussetzung für jede App, die auf die Kamera zugreift. Ohne diesen Schlüssel stürzt die App ab, wenn versucht wird, die Kamera zu öffnen.
Laut einer Studie von Statista (2024) verwenden etwa 68 % der mobilen Apps in den Top 100 des App Store die Kamera in irgendeiner Form: vom Scannen von QR-Codes bis zur vollständigen Foto- und Videoaufnahme. Gleichzeitig verweigern 37 % der Benutzer den Kamerazugriff, wenn sie nicht verstehen, warum die App diese Berechtigung benötigt.
Camera Permission auf Android wird durch eine Deklaration im Manifest und eine anschließende Laufzeitanforderung angefordert. Ab Android 6.0 kann die CAMERA-Berechtigung nicht nur bei der Installation erlangt werden — der Benutzer muss den Zugriff ausdrücklich bestätigen.
Um die Kamera unter Android zu verwenden, müssen Sie die entsprechende Deklaration zur Manifestdatei hinzufügen. Ohne sie erlaubt das System der App nicht, die Kamera zu öffnen, selbst mit einer Laufzeitanforderung.
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
Das Attribut android:required=false für uses-feature ermöglicht die Installation der App auf Geräten ohne Kamera. Dies ist wichtig, wenn die Kamera keine zwingende Komponente für den gesamten App-Betrieb ist.
Die Camera Permission-Anforderung erfolgt über die Activity Result API. Nach Erhalt der Antwort überprüft die App den Status und startet die Kamera oder zeigt eine Erklärung an.
private val cameraLauncher =
registerForActivityResult(ActivityResultContracts.TakePicture()) { success ->
if (success) {
// Foto gespeichert
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)
}
}
Ab Android 11 wird der Systemdialog nicht mehr angezeigt, wenn der Benutzer den Kamerazugriff zweimal verweigert hat. Das Flag Never Ask Again wird automatisch gesetzt, und die App kann den Benutzer nur noch über Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) zu den Systemeinstellungen weiterleiten. Der Entwickler sollte eine Überprüfung von shouldShowRequestPermissionRationale einbauen, um rechtzeitig einen vorbereitenden Bildschirm anzuzeigen.
Camera Permission auf iOS wird über den NSCameraUsageDescription-Schlüssel in Info.plist und einen Aufruf von AVCaptureDevice.requestAccess verwaltet. Apple überprüft streng die Rechtfertigung der Anfrage: Wenn die App die Kamera auf eine für den Benutzer nicht offensichtliche Weise verwendet, kann der App Store die App ablehnen.
Eine obligatorische Bedingung für den Kamerazugriff unter iOS ist das Hinzufügen des NSCameraUsageDescription-Schlüssels zur Info.plist-Datei. Die Wertzeichenfolge wird im Systemdialog als Grund für die Anfrage angezeigt.
<key>NSCameraUsageDescription</key>
<string>Die App benötigt Kamerazugriff, um Profilfotos zu erstellen und QR-Codes zu scannen.</string>
In Swift erfolgt die Anforderung über die statische Methode AVCaptureDevice.requestAccess. Nach Erhalt der Antwort verarbeitet die App den Status und startet die Aufnahmesitzung.
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)")
}
}
Vor der Anforderung des Kamerazugriffs wird empfohlen, den aktuellen Autorisierungsstatus über AVCaptureDevice.authorizationStatus(for: .video) zu überprüfen. Dies vermeidet unnötige Systemdialogaufrufe und behandelt Fälle korrekt, in denen der Benutzer bereits eine Entscheidung getroffen hat. Der Status kann .notDetermined, .restricted, .denied oder .authorized sein.
Camera Permission wird in verschiedenen Szenarien angewendet, vom einfachen Scannen bis zur vollständigen Videoaufnahme. Jedes Szenario hat seine eigenen Anforderungen an Implementierung und Berechtigungshandhabung.
Unter iOS wird AVCaptureMetadataOutput aus dem AVFoundation-Framework zum Scannen von QR-Codes verwendet, was Camera Permission erfordert. Unter Android wird die Verwendung von ML Kit Barcode Scanning von Google empfohlen. Es ist wichtig zu beachten, dass das Scannen von QR-Codes die Kamera selbst verwendet, nicht eine Bildanalysebibliothek — daher ist Camera Permission obligatorisch.
Die Standard-Foto- oder Videoaufnahme erfordert Camera Permission sowohl auf iOS als auch auf Android. Unter Android können Sie Intent(MediaStore.ACTION_IMAGE_CAPTURE) verwenden, das die Systemkamera-App öffnet — in diesem Fall fordert die System-App die Berechtigung an, nicht Ihre. Für die In-App-Kameravorschau (CameraX, Camera2 API) ist jedoch Ihre eigene Berechtigung erforderlich.
Videoanruf-Apps (Zoom, Google Meet) und Augmented-Reality-Apps (ARCore, ARKit) fordern Camera Permission an, um Video von der Front- oder Rückkamera aufzunehmen. In diesem Fall sollte die Anfrage besonders sorgfältig erklärt werden, da der Benutzer nicht erwarten kann, dass eine AR-Möbelanprobe-App die Kamera anfordert.
Bei der Arbeit mit der Kamera unter iOS können Sie die Aufnahmeparameter über AVCaptureDeviceInput und AVCapturePhotoOutput konfigurieren. Unter Android vereinfacht CameraX die Konfiguration über ImageCapture-, VideoCapture- und Preview-Callbacks. Für jede Einstellung müssen Sie die gewünschte Auflösung, Zoomstufe und Fokusart angeben. Die Wahl der richtigen Aufnahmekonfiguration wirkt sich direkt auf die App-Leistung und den Batterieverbrauch aus.
Bei der Arbeit mit der Kamera können verschiedene Fehler auftreten. Die Kamera kann von einer anderen App belegt, in den Systemdatenschutzeinstellungen deaktiviert oder auf dem Gerät nicht vorhanden sein. Unter Android wird empfohlen, CameraAccessException beim Aufruf von CameraManager.openCamera zu behandeln. Unter iOS überprüfen Sie AVCaptureDevice.authorizationStatus und behandeln Sie die Verweigerung korrekt, indem Sie dem Benutzer anbieten, zu den Einstellungen zu gehen, um den Zugriff zu aktivieren. Überprüfen Sie immer die Verfügbarkeit der Kamera auf dem Gerät, bevor Sie eine Berechtigung anfordern, mit PackageManager.hasSystemFeature. Eine solche Überprüfung verhindert unnötige Anfragen auf Geräten ohne Kamera und verbessert die Benutzererfahrung.
Die Leistungsoptimierung bei der Arbeit mit der Kamera ist wichtig für einen reibungslosen App-Betrieb. Die Aufnahme von Videos in hoher Auflösung verbraucht erhebliche CPU- und Batterieressourcen.
Verwenden Sie unter iOS AVCaptureSessionPresetMedium anstelle der maximalen Auflösung, wenn die App keine 4K-Aufnahme benötigt. Unter Android ermöglicht CameraX die Konfiguration von ImageCapture mit einer Zielauflösung über ImageCaptureConfig.Builder. Es ist auch wichtig, die Kamera freizugeben, wenn die App in den Hintergrund wechselt, und sie bei der Rückkehr wieder zu erfassen. Dies ist eine von Google und Apple empfohlene Standardpraxis zur Schonung des Akkus.
Best Practices helfen, die Zustimmungsrate für Camera Permission zu erhöhen und eine Ablehnung der App durch den App Store oder Google Play zu vermeiden.
Zeigen Sie vor dem Systemdialog einen Bildschirm mit einem Beispiel, wie die Kamera verwendet wird: ein Scan-Interface-Bild, ein Profilfoto-Rahmen, ein Beispiel eines erkannten QR-Codes. Visuelle Erklärungen funktionieren besser als textuelle. Laut UX Movement (2024) erhöht das Hinzufügen einer visuellen Vorschau die Zustimmungsrate auf 72 %.
Fordern Sie Camera Permission niemals beim ersten App-Start an. Ein Benutzer, der die App gerade geöffnet hat, wird eher ablehnen, wenn er den Kontext nicht versteht. Fordern Sie den Zugriff erst an, wenn der Benutzer eine Schaltfläche drückt, die die Kamera erfordert: „Profilfoto aufnehmen“, „Code scannen“, „Videoanruf starten“. Ein kontextueller Auslöser macht die Anfrage sinnvoller.
Wenn der Benutzer die Camera Permission verweigert, bieten Sie eine alternative Möglichkeit zur Durchführung der Aktion an: Auswahl eines Fotos aus der Galerie, manuelle Eingabe der QR-Code-Daten, Hochladen eines Bildes vom Gerät. Eine Verweigerung sollte die App-Funktionalität nicht vollständig blockieren — dies ist eine Anforderung der Designempfehlungen von Google Play und App Store.
Häufig gestellte Fragen
Wenn die App beim Versuch, die Kamera ohne Berechtigung zu öffnen, abstürzt, erhalten Sie einen Fehler. Sie müssen den Status vorab über checkSelfPermission unter Android oder authorizationStatus unter iOS überprüfen und ein alternatives Szenario anbieten.
Ja, das Scannen von QR-Codes über die Kamera erfordert Camera Permission. Ein alternativer Ansatz ist die Verwendung von QR-Code-Erkennungsbibliotheken aus einem Bild ohne Kamera (z. B. Herunterladen eines Fotos mit dem Code aus der Galerie), dies erfordert jedoch die Photo Library Permission.
In der Jetpack Compose-Architektur können Sie rememberLauncherForActivityResult mit ActivityResultContracts.RequestPermission in einer composable-Funktion verwenden. Für Dienste ohne UI ist eine direkte Berechtigungsanfrage nicht möglich — die Kontrolle muss an eine Activity übergeben werden.
Die wahrscheinlichste Ursache ist das Fehlen des Schlüssels NSCameraUsageDescription in Info.plist. Seit iOS 10 führt jeder Zugriff auf AVCaptureDevice ohne diesen Schlüssel zu einem Absturz mit einer NSInvalidArgumentException.
Unter Android setzen Sie die App-Einstellungen über Settings → Apps → [App] → Permissions zurück. Unter iOS verwenden Sie Settings → [App] → Camera toggle. Für Testautomatisierung unter iOS können Sie XCUITest mit resetAuthorizationStatus verwenden.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch