Eine Kamera in mobilen Anwendungen ist ein Hardwaremodul des Geräts, auf das der Entwickler über System-APIs zugreifen kann, um Bilder und Videos aufzunehmen. Laut Google Android Developers (2025) wird CameraX in über 85 % der Android-Anwendungen verwendet, die Kamerafunktionalität benötigen. AVFoundation auf iOS und CameraX auf Android bieten hochrangige Schnittstellen, die die Komplexität der Hardwareverwaltung verbergen.
Wichtige Punkte
Eine mobile Kamera ist ein integriertes optisches Modul, bestehend aus einem Objektiv, einem Bildsensor und einem Bildsignalprozessor (ISP). Der Entwickler greift über das Betriebssystem mit speziellen Frameworks auf die Kamera zu. Auf Android sind dies Camera2 API (niedrige Ebene) und CameraX (hohe Ebene, basierend auf Camera2), auf iOS — AVFoundation und UIKit für einfache Szenarien. Jede Plattform bietet ihr eigenes Toolkit, aber das Grundkonzept ist dasselbe: Die Anwendung initialisiert eine Aufnahmesitzung, konfiguriert Parameter (Auflösung, Fokus, Belichtung) und empfängt einen Bildstrom oder einzelne Bilder.
Moderne Mobilkameras unterstützen viele Aufnahmemodi: HDR, Nachtmodus, Porträt mit Hintergrundunschärfe, Zeitlupenvideo und Aufnahme im RAW-Format. Der Entwickler hat Zugriff auf Softwareeinstellungen: ISO (Sensorempfindlichkeit), Verschlusszeit (Belichtung), Weißabgleich, Fokus (automatisch und manuell) und Bildstabilisierung. Flaggschiff-Geräte können bis zu 4 Kameras mit unterschiedlichen Brennweiten haben, und die Anwendung kann eine bestimmte Kamera nach ID auswählen.
Mobile Plattformen bieten mehrere APIs für die Kameraarbeit, die sich im Abstraktionsgrad und Funktionsumfang unterscheiden. Die Wahl einer bestimmten API hängt von den Projektanforderungen ab: Für einfache Fotoaufnahmen reichen CameraX oder UIImagePickerController; für professionelle Anwendungen ist Camera2 oder AVFoundation mit direkter Sensorsteuerung erforderlich. Nachfolgend ein Vergleich der wichtigsten APIs.
| API | Plattform | Ebene | Funktionen |
|---|---|---|---|
| CameraX | Android | Hoch | Lifecycle-aware, 95 % der Geräte |
| Camera2 | Android | Niedrig | Vollständige Kontrolle, RAW, Burst |
| AVFoundation | iOS | Mittel | Volle Aufnahmekontrolle |
| UIKit (UIImagePickerController) | iOS | Hoch | Fertige UI, keine Anpassung |
CameraX ist die optimale Wahl für die meisten Android-Anwendungen, die eine Kamera ohne tiefgehende Anpassung benötigen. Die Bibliothek verwaltet automatisch den Activity- und Fragment-Lebenszyklus, unterstützt Berechtigungen und gewährleistet Kompatibilität zwischen verschiedenen Android-Versionen. CameraX garantiert dank seiner Kompatibilitätsschicht ein konsistentes Verhalten auf 95 % der Android-Geräte. Wenn Sie eine Kameravorschau (Preview), Fotoaufnahme (ImageCapture) oder Bildanalyse (ImageAnalysis) benötigen — CameraX bewältigt alle drei Szenarien ohne komplexen Code.
Camera2 ist eine niedrigschwellige API für professionelle Szenarien: RAW-Aufnahme, manuelle Belichtungseinstellung, Burst-Aufnahme und gleichzeitige Steuerung mehrerer Kameras. Camera2 erfordert vom Entwickler ein tiefes Verständnis der Bildaufnahme-Pipeline, des StateMachine-Managements und der Callback-Behandlung. Verwenden Sie Camera2 nur, wenn CameraX die Anforderungen nicht abdeckt: beispielsweise Dokumentenscan-Anwendungen mit manuellem Fokus oder benutzerdefinierte Kameras mit nicht standardmäßiger Auflösung.
Der Zugriff auf die Kamera erfordert auf beiden Plattformen die ausdrückliche Zustimmung des Benutzers. Auf Android wird die CAMERA-Berechtigung im Manifest hinzugefügt, und ab Android 6.0 muss die Berechtigung auch zur Laufzeit über ActivityCompat.requestPermissions angefordert werden. Auf iOS wird der Schlüssel NSCameraUsageDescription mit einer Beschreibung des Verwendungszwecks der Kamera in Info.plist hinzugefügt. Ohne diese Beschreibung stürzt die Anwendung beim Versuch, auf die Kamera zuzugreifen, ab. Ab iOS 14 zeigt der Berechtigungsdialog nicht nur den Namen der Anwendung, sondern auch den angegebenen Grund an — die Formulierung muss für den Benutzer klar sein.
CameraX vereinfacht die Arbeit mit der Kamera auf nur wenige Codezeilen. Zum Starten einer Vorschau müssen Sie eine Preview-Instanz erstellen, sie an einen LifecycleOwner binden und einen SurfaceProvider für die Anzeige erhalten. Für die Fotoaufnahme wird ImageCapture mit einem Speicherziel verwendet. Nachfolgend ein vollständiges Beispiel zum Starten der Kamera und Aufnehmen eines Fotos mit CameraX in 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", "Bindung fehlgeschlagen", e)
}
}, ContextCompact.getMainExecutor(this))
Die Methode bindToLifecycle bindet die Kamera an den Lebenszyklus der Activity — bei Bildschirmdrehung oder Wechsel in den Hintergrund wird die Kamera automatisch freigegeben. CameraSelector.DEFAULT_BACK_CAMERA wählt die Rückkamera; für die Frontkamera wird DEFAULT_FRONT_CAMERA verwendet. Nach der Bindung beginnt Preview mit der Anzeige des Kamerafeeds im PreviewView, und der Benutzer sieht das Kamerabild auf dem Bildschirm.
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", "Aufnahmefehler", exception)
}
}
)
Die Methode takePicture nimmt ein Bild von der Kamera auf und speichert es in einer Datei. OutputFileOptions unterstützt das Schreiben in File, ContentResolver und MediaStore. Im onImageSaved-Callback erhält die Anwendung eine Benachrichtigung über erfolgreiches Speichern und kann die UI aktualisieren. CAPTURE_MODE_MINIMIZE_LATENCY sorgt durch Reduzierung der Nachbearbeitung für maximale Verschlussgeschwindigkeit.
Auf iOS wird der Zugriff auf die Kamera durch das AVFoundation-Framework über die Klasse AVCaptureSession bereitgestellt. Der Entwickler erstellt eine Aufnahmesitzung, fügt die erforderlichen Eingänge (AVCaptureDeviceInput) und Ausgänge (AVCapturePhotoOutput, AVCaptureVideoDataOutput) hinzu und startet die Sitzung. Für die Vorschauanzeige wird AVCaptureVideoPreviewLayer verwendet. Nachfolgend ein Beispiel für die Einrichtung einer Sitzung zur Fotoaufnahme in 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 stellt die optimale Auflösung für Fotos ein (normalerweise 12 MP auf modernen Geräten). Der Eingang ist ein für die Kamera des Geräts erstellter AVCaptureDeviceInput. Nach dem Hinzufügen von Eingang und Ausgang wird die Sitzung über startRunning in einem Hintergrundthread gestartet — das Starten der Sitzung kann auf älteren Geräten bis zu 200 ms dauern. Zum Aufnehmen eines Fotos wird capturePhoto(with:delegate:) aufgerufen, und das Ergebnis wird über AVCapturePhotoCaptureDelegate zurückgegeben.
Bei der Arbeit mit der Kamera auf mobilen Geräten müssen Hardware-Einschränkungen berücksichtigt werden: Erwärmung des Geräts bei längerer Aufnahme, Batterieverbrauch bei hoher Auflösung und unterschiedliche Kameraqualität bei verschiedenen Geräten. Auf Android führt die Fragmentierung des Ökosystems dazu, dass dieselbe CameraX-Konfiguration auf verschiedenen Modellen unterschiedlich funktionieren kann. Auf iOS betreffen die Einschränkungen hauptsächlich die Lizenzierung: Die Verwendung der Kamera im Hintergrund erfordert eine spezielle Genehmigung von Apple. Es ist auch wichtig zu bedenken, dass Simulatoren keinen Zugriff auf eine echte Kamera haben — Tests sind nur auf einem physischen Gerät möglich.
CameraX löst das Fragmentierungsproblem von Android durch die Kompatibilitätsschicht CameraXConfig — die Bibliothek wendet automatisch Workarounds für bekannte Herstellerfehler an. Auf iOS funktioniert AVFoundation auf allen Geräten ab iOS 6 einheitlich, aber einige Funktionen (wie Porträtmodus oder LiDAR) sind nur auf iPhone 12 und neueren Modellen verfügbar. Bei der Entwicklung einer plattformübergreifenden Anwendung wird die Verwendung von Flutter oder React Native mit Kamera-Plugins empfohlen — sie abstrahieren Plattformunterschiede und bieten eine einheitliche API für beide Betriebssysteme.
Häufig gestellte Fragen
Für die meisten Anwendungen wird CameraX aufgrund seiner Benutzerfreundlichkeit, integrierten Lebenszyklusverwaltung und Kompatibilität mit 95 % der Geräte empfohlen. Camera2 sollte nur gewählt werden, wenn RAW, Burst-Aufnahme oder manuelle Sensorsteuerung erforderlich sind.
Fügen Sie auf Android die CAMERA-Berechtigung zum Manifest hinzu und fordern Sie sie zur Laufzeit über ActivityCompat.requestPermissions an. Fügen Sie auf iOS NSCameraUsageDescription mit einer klaren Erklärung des Verwendungszwecks der Kamera in Info.plist hinzu.
Auf iOS ist die Verwendung der Kamera im Hintergrund streng eingeschränkt — eine spezielle Genehmigung von Apple ist erforderlich. Auf Android kann die Kamera über einen Vordergrunddienst im Hintergrund arbeiten, was sich jedoch negativ auf die Akkulaufzeit und die Geräteerwärmung auswirkt.
iOS-Simulatoren und Android-Emulatoren haben keinen Zugriff auf eine physische Kamera — sie emulieren keinen echten Sensor. Verwenden Sie zum Testen der Kamerafunktionalität immer ein physisches Gerät oder eine externe, an den Computer angeschlossene Kamera.
ImageAnalysis ist ein Bildstrom-Analysator von CameraX, der jedes Bild zur Verarbeitung an ImageAnalysis.Analyzer übergibt. Es wird für QR-Code-Erkennung, Gesichtserkennung, Dokumentenscan und andere Computer-Vision-Aufgaben verwendet.
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