android-media-playback-cameralisted
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