Überblick über CameraX
Warum CameraX den alten Kamera-APIs vorzuziehen ist
Überblick über CameraX ist eine kostenlose Android Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Android Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Android Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum CameraX?
Eine Kamera zu einer Android-App hinzuzufügen, war früher mühsam. Die alte API android.hardware.camera2 ist leistungsfähig, aber äußerst ausführlich und verhält sich auf den Tausenden tatsächlich verwendeten Geräten unterschiedlich.
CameraX ist eine Jetpack-Bibliothek, die auf Camera2 aufsetzt und Ihnen eine einfache, lebenszyklusbewusste und konsistente API bietet. In diesem Kurs verwenden Sie CameraX, um eine Live-Vorschau anzuzeigen, Fotos aufzunehmen und Videos aufzuzeichnen.
Was CameraX löst
CameraX wurde mit drei Zielen entwickelt:
- Einfache Nutzung – deutlich weniger Boilerplate als bei Camera2.
- Konsistenz – Google testet CameraX in einer großen Geräteumgebung, sodass sich ungewöhnliche Geräte vorhersehbar verhalten.
- Lebenszyklusbewusstsein – die Kamera wird automatisch mit dem Lebenszyklus Ihres Bildschirms gestartet und beendet, sodass die Kamera nicht ungewollt geöffnet bleibt.
Sie beschreiben, was Sie möchten (eine Vorschau, ein Foto oder ein Video), und CameraX bestimmt, wie dies auf dem aktuellen Gerät umgesetzt wird.
Die drei zentralen Anwendungsfälle
CameraX basiert auf Anwendungsfällen. Ein Anwendungsfall ist ein in sich geschlossener Teil der Kamerafunktionalität. Die drei wichtigsten sind:
Preview– zeigt auf dem Bildschirm, was die Kamera sieht.ImageCapture– nimmt ein Foto auf.VideoCapture– zeichnet ein Video auf.
Sie erstellen die benötigten Anwendungsfälle und binden sie gemeinsam an die Kamera.
// You create the use cases you need:
val preview = Preview.Builder().build()
val imageCapture = ImageCapture.Builder().build()
// Later you bind them to a lifecycle and a camera.Abhängigkeiten hinzufügen
CameraX wird als mehrere Artefakte bereitgestellt. Sie fügen diese der Datei build.gradle.kts Ihres Moduls hinzu. Eine typische Konfiguration umfasst die Kernbibliothek, das Camera2-Backend, die Lebenszyklusintegration und Hilfsfunktionen für Ansichten.
Verwenden Sie für alle CameraX-Artefakte dieselbe Version, um Konflikte zu vermeiden.
dependencies {
val cameraxVersion = "1.3.4"
implementation("androidx.camera:camera-core:$cameraxVersion")
implementation("androidx.camera:camera-camera2:$cameraxVersion")
implementation("androidx.camera:camera-lifecycle:$cameraxVersion")
implementation("androidx.camera:camera-view:$cameraxVersion")
implementation("androidx.camera:camera-video:$cameraxVersion")
}Berechtigungen deklarieren
Um die Kamera zu verwenden, müssen Sie die Berechtigung CAMERA in Ihrer AndroidManifest.xml deklarieren. Wenn Sie auch Videos aufzeichnen, benötigen Sie möglicherweise RECORD_AUDIO.
Dies sind Laufzeitberechtigungen – ihre Deklaration allein reicht nicht aus. Sie müssen die Person auch zur Laufzeit danach fragen (dies wird in späteren Lektionen behandelt).
<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-feature
android:name="android.hardware.camera.any"
android:required="false" />Der CameraProvider
Der Einstiegspunkt in CameraX ist ProcessCameraProvider. Er verbindet die Anwendungsfälle mit der Kamera und dem Lebenszyklus Ihres Bildschirms.
Sie rufen ihn asynchron mit getInstance() ab, das ein ListenableFuture zurückgibt. In Kotlin können Sie innerhalb einer Coroutine await() verwenden.
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.camera.core.ExperimentalGetImage
suspend fun Context.getCameraProvider(): ProcessCameraProvider {
return ProcessCameraProvider.getInstance(this).await()
}Anwendungsfälle an einen Lebenszyklus binden
Sobald Sie den Provider haben, binden Sie Ihre Anwendungsfälle an einen LifecycleOwner und einen CameraSelector (die Front- oder Rückkamera).
Da die Bindung den Lebenszyklus berücksichtigt, öffnet CameraX die Kamera automatisch, wenn Ihr Bildschirm sichtbar ist, und schließt sie, wenn er nicht sichtbar ist – eine manuelle Bereinigung ist nicht erforderlich.
val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
lifecycleOwner,
cameraSelector,
preview,
imageCapture
)Eine Kamera auswählen
Ein CameraSelector legt fest, welche physische Kamera verwendet werden soll. Die beiden häufigsten Optionen sind die standardmäßige Rück- und die standardmäßige Frontkamera.
Sie können auch einen benutzerdefinierten Selektor erstellen, um bestimmte Eigenschaften vorauszusetzen. Für fast jede App reichen jedoch die Standardeinstellungen aus.
// Back camera (most common for photos)
val back = CameraSelector.DEFAULT_BACK_CAMERA
// Front camera (selfies, video calls)
val front = CameraSelector.DEFAULT_FRONT_CAMERA
// Toggle between them by swapping the selector and re-binding.PreviewView: Die Anzeigeoberfläche
CameraX rendert die Live-Vorschau in eine PreviewView. Dabei handelt es sich um eine gewöhnliche Android-View, die Oberfläche, Skalierung und Drehung für Sie verwaltet.
In Jetpack Compose binden Sie sie mit AndroidView ein. Damit können Sie eine klassische View innerhalb eines Composable platzieren. In der nächsten Lektion richten Sie dies vollständig ein.
AndroidView(
factory = { context ->
PreviewView(context).apply {
scaleType = PreviewView.ScaleType.FILL_CENTER
}
},
modifier = Modifier.fillMaxSize()
)Lebenszyklusbewusstsein in der Praxis
Der größte praktische Vorteil von CameraX ist das Lebenszyklusbewusstsein. Mit Camera2 mussten Sie die Kamera manuell in onResume öffnen und in onPause freigeben. Wenn Sie dies vergaßen, kam es zu Abstürzen oder einer blockierten Kamera.
Bei CameraX erledigt das Framework all dies, sobald Sie bindToLifecycle verwenden. Wenn die Person zu einem anderen Bildschirm navigiert, wird die Kamera automatisch freigegeben. Bei der Rückkehr wird sie erneut geöffnet.
// No manual open/close needed.
// bindToLifecycle ties the camera to the screen's
// lifecycle, so it follows onStart/onStop for you.
cameraProvider.bindToLifecycle(lifecycleOwner, selector, preview)Ihr Denkmodell
Behalten Sie für den restlichen Kurs dieses Bild im Kopf:
- Rufen Sie einen
ProcessCameraProviderab. - Erstellen Sie die benötigten Anwendungsfälle (
Preview,ImageCapture,VideoCapture). - Wählen Sie einen
CameraSelectoraus. - Verbinden Sie alles mit
bindToLifecycle.
Jede CameraX-Funktion ist lediglich eine Variante dieser vier Schritte.
Kurze Überprüfung
Testen Sie Ihr Verständnis der Grundlagen von CameraX.
Zusammenfassung
Sie verstehen jetzt das große Ganze von CameraX:
- CameraX kapselt Camera2 in einer einfacheren, konsistenteren und lebenszyklusbewussten API.
- Die Bibliothek basiert auf Anwendungsfällen:
Preview,ImageCaptureundVideoCapture. - Sie fügen die CameraX-Artefakte hinzu, deklarieren die Berechtigung
CAMERA, rufen einenProcessCameraProviderab und verwendenbindToLifecycle. - Ein
CameraSelectorwählt zwischen Front- und Rückkamera, während einePreviewViewdas Kamerabild anzeigt.
Als Nächstes richten Sie eine echte Live-Vorschau auf dem Bildschirm ein.
Lerne Kotlin mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 36
- Lektionen
- 152
Häufig gestellte Fragen
Ist die Lektion „Überblick über CameraX“ kostenlos?
Ja — der vollständige Text von „Überblick über CameraX“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Android Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Android Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Überblick über CameraX“?
Warum CameraX den alten Kamera-APIs vorzuziehen ist Du übst Android Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Android Academy zu starten?
Keine Vorkenntnisse erforderlich. Android Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Überblick über CameraX“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Android Academy-Lektion Code schreiben und ausführen?
Ja. Jede Android Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Überblick über CameraX
- Eine Kameravorschau anzeigen
- Fotos aufnehmen
- Videos aufnehmen