ExoPlayer
Dependencies
Section titled “Dependencies”implementation("androidx.media3:media3-exoplayer:1.5.1")implementation("androidx.media3:media3-common:1.5.1")Create a player
Section titled “Create a player”val player = remember { ExoPlayer.Builder(context).build() }Add media source with URI and prepare for playing
Section titled “Add media source with URI and prepare for playing”player.setMediaItem(MediaItem.fromUri("<uri>"))player.prepare()Player Actions
Section titled “Player Actions”play()- play the mediapause()- pause the mediastop()- end the mediarelease()- unload player
Release when UI unmounts
Section titled “Release when UI unmounts”DisposableEffect(Unit) { onDispose { ExoPlayer.release() }}Playlist
Section titled “Playlist”The playlist in ExoPlayer is just a set of MediaItems
MediaItem.Builder() .setUri(host + music.url) .setMediaMetadata( // set some metadata MediaMetadata.Builder() .setTitle(music.title()) .setDescription(music.cover) .build() ) .build()Add media items array to the player
Section titled “Add media items array to the player”player.setMediaItems(mediaItems)Player Listener
Section titled “Player Listener”Use a player listener to retrieve realtime metadata from player
player.addListener(object : Player.Listener { override fun onEvents(player: Player, events: Player.Events) { // something to do super.onEvents(player, events) }})Volume
Section titled “Volume”// use `player.volume` to get/set volume, sooo easy~fun adjustVolume(target: Float) { player.volume.coerceIn(0.0f, 1.0f) player.volume = target}Repeat Mode
Section titled “Repeat Mode”player.repeatMode // getplayer.repeatMode = Player.REPEAT_MODE_OFF // no repeatplayer.repeatMode = Player.REPEAT_MODE_ONE // for current media itemplayer.repeatMode = Player.REPEAT_MODE_ALL // for the whole playlist