0Pricing
Android Academy · Lekcja

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, ImageCapture i VideoCapture.
  • Dodajesz artefakty CameraX, deklarujesz uprawnienie CAMERA, uzyskujesz ProcessCameraProvider i wywołujesz bindToLifecycle.
  • CameraSelector wybiera aparat przedni lub tylny, a PreviewView wyś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

  1. Przegląd CameraX
  2. Wyświetlanie podglądu z aparatu
  3. Robienie zdjęć
  4. Nagrywanie wideo
← Powrót do Android Academy