Two players communicating using 2 media players - devrath/MediaAlchemySuite GitHub Wiki
🎬 Your App: Playing Video with Media3 (ExoPlayer 3)
ExoPlayer: Plays the videoMediaSession: Informs the system that your app is playing mediaMediaSessionService: Runs in the background, holds the session and playerMediaController: Used by system UI or your app to send playback commands
🎧 Another App (e.g., YouTube) Starts Playing
- Android has a global MediaSessionManager that tracks all media sessions
- Only one active session at a time (gets system focus)
What Happens:
-
YouTube starts playing → Android focuses on its session
-
Your
MediaSessiongoes to background or pauses -
You receive
onAudioFocusChange(...)- Your
MediaSessionServiceshould pause the player
- Your
-
If user comes back to your app:
- You request audio focus again
- If granted, your
MediaSessionbecomes active - System routes media buttons, lock screen controls, and notifications to your app again
🔧 Visual Logic
Your App YouTube App
[Session] [Session]
↓ ↓
MediaSessionManager (Android)
↓
Routes play/pause to only one session
🧩 MediaLibraryService
- Needed only if client apps (e.g., Android Auto, Google Assistant) want to browse your media
- It exposes a media catalog
- Not required for simple video playback
✅ Summary
- You create
MediaSessionin aMediaSessionServicetied toExoPlayer - Android decides which session is active based on audio focus
- Only one session can handle system playback controls
- Another app starting media will likely pause yours
- Use
MediaLibraryServiceonly for exposing a browsable media library to external clients