← ClaudeAtlas

android-media-playback-cameralisted

Media playback and camera patterns for Android - Media3/ExoPlayer player lifecycle, PlayerView in Compose via AndroidView, CameraX Preview/ImageCapture/VideoCapture use cases, ProcessCameraProvider lifecycle binding, saving captured media to MediaStore with scoped storage, and background audio with MediaSessionService. Use this skill whenever implementing video or audio playback, integrating a camera preview, capturing photos or video, or playing audio in the background. Trigger on phrases like "video player", "ExoPlayer", "Media3", "camera", "CameraX", "capture photo", "record video", "media playback", or "background audio".
lenorebreakneck630/claude-zero-to-hero-android-KMP · ★ 1 · AI & Automation · score 64
Install: claude install-skill lenorebreakneck630/claude-zero-to-hero-android-KMP
# Android Media Playback and Camera (Media3 + CameraX) ## Core Principles - Create the ExoPlayer in `onStart`, release it in `onStop` — never leak a player across configuration changes. - CameraX use cases are bound to a `LifecycleOwner`; let the library manage start/stop automatically. - Always request CAMERA and RECORD_AUDIO permissions before binding CameraX use cases. See **android-permissions-device-apis**. - Save captured media through MediaStore, not raw file paths — scoped storage makes direct paths unreliable on Android 10+. - Background audio requires a `MediaSessionService` and a foreground notification; plain coroutines in the background are killed. --- ## Gradle Dependencies ```kotlin // libs.versions.toml [versions] media3 = "1.3.1" camerax = "1.3.3" [libraries] media3-exoplayer = { module = "androidx.media3:media3-exoplayer", version.ref = "media3" } media3-ui = { module = "androidx.media3:media3-ui", version.ref = "media3" } media3-session = { module = "androidx.media3:media3-session", version.ref = "media3" } camerax-core = { module = "androidx.camera:camera-core", version.ref = "camerax" } camerax-camera2 = { module = "androidx.camera:camera-camera2", version.ref = "camerax" } camerax-lifecycle = { module = "androidx.camera:camera-lifecycle", version.ref = "camerax" } camerax-view = { module = "androidx.camera:camera-view", version.ref = "c