Przegląd CameraX
Dowiedz się, dlaczego warto wybrać CameraX zamiast starszych API aparatu
Przegląd CameraX to bezpłatna lekcja Android Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Android Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Android Academy zawiera 4 lekcji w sumie.
Dlaczego CameraX?
Dodawanie aparatu do aplikacji na Androida bywało kiedyś uciążliwe. Stary interfejs API android.hardware.camera2 jest potężny, ale niezwykle rozwlekły i działa różnie na tysiącach dostępnych urządzeń.
CameraX to biblioteka Jetpack działająca na bazie Camera2, która udostępnia prosty, świadomy cyklu życia i spójny interfejs API. W tym kursie użyjesz CameraX do wyświetlania podglądu na żywo, robienia zdjęć i nagrywania wideo.
Problemy rozwiązywane przez CameraX
CameraX zaprojektowano z myślą o trzech celach:
- Łatwość użycia — znacznie mniej kodu powtarzalnego niż w Camera2.
- Spójność — Google testuje bibliotekę na dużej liczbie urządzeń, dzięki czemu nawet nietypowe urządzenia zachowują się przewidywalnie.
- Świadomość cyklu życia — aparat uruchamia się i zatrzymuje automatycznie zgodnie z cyklem życia ekranu, więc nie pozostawisz otwartego aparatu.
Określasz co chcesz uzyskać (podgląd, zdjęcie lub wideo), a CameraX ustala, jak zrobić to na bieżącym urządzeniu.
Trzy podstawowe przypadki użycia
CameraX opiera się na przypadkach użycia. Przypadek użycia to samodzielny element funkcjonalności aparatu. Trzy najważniejsze to:
Preview— wyświetlanie na ekranie obrazu widzianego przez aparat.ImageCapture— robienie zdjęć.VideoCapture— nagrywanie wideo.
Tworzysz potrzebne przypadki użycia i wiążesz je z aparatem.
// 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.Dodawanie zależności
CameraX jest dostarczany jako kilka artefaktów. Dodajesz je do pliku build.gradle.kts modułu. Typowa konfiguracja obejmuje bibliotekę podstawową, backend camera2, integrację z cyklem życia oraz pomocnicze komponenty widoku.
Aby uniknąć konfliktów, wszystkie artefakty CameraX powinny mieć tę samą wersję.
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")
}Deklarowanie uprawnień
Aby używać aparatu, musisz zadeklarować uprawnienie CAMERA w pliku AndroidManifest.xml. Jeśli nagrywasz również wideo, może być potrzebne uprawnienie RECORD_AUDIO.
Są to uprawnienia przyznawane w czasie działania aplikacji — sama deklaracja nie wystarczy; musisz również poprosić o nie użytkownika w czasie działania aplikacji (zostanie to omówione w kolejnych lekcjach).
<!-- 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" />CameraProvider
Punktem wejścia do CameraX jest ProcessCameraProvider. Łączy on przypadki użycia z aparatem oraz cyklem życia ekranu.
Otrzymujesz go asynchronicznie za pomocą getInstance(), które zwraca obiekt ListenableFuture. W Kotlinie możesz użyć await() wewnątrz korutyny.
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.camera.core.ExperimentalGetImage
suspend fun Context.getCameraProvider(): ProcessCameraProvider {
return ProcessCameraProvider.getInstance(this).await()
}Powiązywanie przypadków użycia z cyklem życia
Po uzyskaniu providera wiążesz przypadki użycia z obiektem LifecycleOwner oraz CameraSelector (aparatem przednim lub tylnym).
Ponieważ powiązanie uwzględnia cykl życia, CameraX automatycznie otwiera aparat, gdy ekran jest widoczny, i zamyka go, gdy ekran znika — nie trzeba ręcznie sprzątać zasobów.
val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
lifecycleOwner,
cameraSelector,
preview,
imageCapture
)Wybieranie aparatu
CameraSelector wskazuje CameraX fizyczny aparat, którego ma użyć. Dwa najczęściej używane to domyślny aparat tylny i domyślny aparat przedni.
Możesz również utworzyć własny selektor wymagający określonych cech, ale wartości domyślne wystarczają niemal każdej aplikacji.
// 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: powierzchnia wyświetlania
CameraX renderuje podgląd na żywo w obiekcie PreviewView. To zwykły obiekt Androida typu View, który obsługuje za Ciebie powierzchnię, skalowanie i obrót.
W Jetpack Compose osadzasz go za pomocą AndroidView, co pozwala umieścić klasyczny View wewnątrz composable. W następnej lekcji skonfigurujesz to w całości.
AndroidView(
factory = { context ->
PreviewView(context).apply {
scaleType = PreviewView.ScaleType.FILL_CENTER
}
},
modifier = Modifier.fillMaxSize()
)Świadomość cyklu życia w praktyce
Największą praktyczną zaletą CameraX jest świadomość cyklu życia. W Camera2 trzeba było ręcznie otwierać aparat w onResume i zwalniać go w onPause, a zapomnienie o tym prowadziło do awarii lub zablokowania aparatu.
W CameraX po wywołaniu bindToLifecycle framework zajmuje się tym wszystkim. Gdy użytkownik opuszcza ekran, aparat jest automatycznie zwalniany, a po powrocie ponownie otwierany.
// 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)Model mentalny
Przez resztę kursu miej na uwadze następujący schemat:
- Uzyskaj
ProcessCameraProvider. - Zbuduj potrzebne przypadki użycia (
Preview,ImageCapture,VideoCapture). - Wybierz
CameraSelector. - Wywołaj
bindToLifecycle, aby połączyć wszystkie elementy.
Każda funkcja CameraX jest tylko wariantem tych czterech kroków.
Szybkie sprawdzenie
Sprawdź swoją wiedzę na temat podstaw CameraX.
Podsumowanie
Znasz już ogólny obraz CameraX:
- CameraX opakowuje Camera2, udostępniając prostszy, bardziej spójny interfejs API uwzględniający cykl życia.
- Opiera się na przypadkach użycia:
Preview,ImageCaptureiVideoCapture. - Dodajesz artefakty CameraX, deklarujesz uprawnienie
CAMERA, uzyskujeszProcessCameraProvideri wywołujeszbindToLifecycle. CameraSelectorwybiera aparat przedni lub tylny, aPreviewViewwyświetla obraz.
W następnej części skonfigurujesz prawdziwy podgląd na żywo na ekranie.
Często zadawane pytania
Czy lekcja „Przegląd CameraX” jest bezpłatna?
Tak — pełny tekst „Przegląd CameraX” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Android Academy, przejdź na CoddyKit PRO. Kurs Android Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Przegląd CameraX”?
Dowiedz się, dlaczego warto wybrać CameraX zamiast starszych API aparatu Ćwiczysz Android Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Android Academy?
Nie wymagamy żadnego doświadczenia. Android Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Przegląd CameraX”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Android Academy?
Tak. Każda lekcja Android Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Przegląd CameraX
- Wyświetlanie podglądu z aparatu
- Robienie zdjęć
- Nagrywanie wideo