androidx.media3.common.util.Assertions.checkState(Assertions.java:85)
@marcbaechinger is already working on this.
Since Nov 4, 2025.
- Dominant language
- Java
- Stars
- 3k
- Forks
- 955
- Avg merge
- 12d 14h
- Merged PRs (30d)
- 2
Description
Version
Media3 1.4.0
More version details
api("androidx.media3:media3-exoplayer:1.4.0")
api("androidx.media3:media3-session:1.4.0")
api("androidx.media3:media3-common:1.4.0")
Devices that reproduce the issue
Customized in-vehicle infotainment system, using Android 13.
Devices that do not reproduce the issue
No response
Reproducible in the demo app?
No
Reproduction steps
1.My multimedia application uses exoPlayer internally, and there's a requirement to switch the player when changing audio sources. Therefore, I'm binding a player to the MediaLibrarySession using: MediaLibrarySession.Builder(this, switchablePlayer, this). The problem tends to occur when the internal audio source switches from Bluetooth to USB
update list to exoPlayer:
override fun onUsbPlaylistChanged(playlist: List<MediaItem>) {
MediaLog.i(TAG, " onUsbPlaylistChanged playlist ${playlist.size}")
currentMediaList.clear()
currentMediaList.addAll(playlist)
exoPlayer?.clearMediaItems()
exoPlayer?.addMediaItems(currentMediaList)
}
2.when I need Play ,changing the internal player accordingly
fun switchPlayer(newSmartPlayer: SmartPlayer?) {
MediaLog.d(TAG, "Switching player: ${currentSmartPlayer?.javaClass?.simpleName} → ${newSmartPlayer?.javaClass?.simpleName}")
currentPlayer?.removeListener(forwardingListener)
currentSmartPlayer = newSmartPlayer
currentPlayer = newSmartPlayer?.getPlayer()
currentPlayer?.addListener(forwardingListener)
MediaLog.d(TAG, "Player switched, listeners: ${listeners.size}")
currentPlayer?.currentMediaItem?.let { item ->
mediaItemChangeCallback?.onMediaItemDataChange(item)
}
}
3.This player switching is done within SwitchablePlayer.
I will call the play logic.
override fun playMediaByItem(mediaItem: MediaItem) {
MediaLog.d(TAG, "playMediaByItem: ${mediaItem.mediaMetadata.title}")
MediaLog.d(TAG, "playMediaByItem: ${mediaItem.mediaId}")
val index = findMediaIndex(mediaItem)
if (index >= 0) {
playMediaAtIndex(index)
} else {
MediaLog.w(TAG, "Media not found in playlist: ${mediaItem.mediaId}")
}
}
private fun playMediaAtIndex(index: Int) {
if (index >= 0 && index < currentMediaList.size) {
exoPlayer?.seekToDefaultPosition(index)
exoPlayer?.prepare()
exoPlayer?.play()
MediaLog.d(TAG, "Playing media at index: $index")
} else {
MediaLog.w(TAG, "Invalid index: $index, playlist size: ${currentMediaList.size}")
}
}
Expected result
The usb music media play successfully
Actual result
Playback crashes with the following stack trace
11-03 19:11:19.734 3824 3824 E AndroidRuntime: Process: com.smartlink.multimedia, PID: 3824
11-03 19:11:19.734 3824 3824 E AndroidRuntime: java.lang.IllegalStateException
11-03 19:11:19.734 3824 3824 E AndroidRuntime: at androidx.media3.common.util.Assertions.checkState(Assertions.java:85)
11-03 19:11:19.734 3824 3824 E AndroidRuntime: at androidx.media3.session.PlayerInfo$Builder.build(PlayerInfo.java:381)
11-03 19:11:19.734 3824 3824 E AndroidRuntime: at androidx.media3.session.PlayerInfo.copyWithTimeline(PlayerInfo.java:597)
11-03 19:11:19.734 3824 3824 E AndroidRuntime: at androidx.media3.session.MediaUtils.mergePlayerInfo(MediaUtils.java:149)
11-03 19:11:19.734 3824 3824 E AndroidRuntime: at androidx.media3.session.MediaControllerImplBase.onPlayerInfoChanged(MediaControllerImplBase.java:2715)
11-03 19:11:19.734 3824 3824 E AndroidRuntime: at androidx.media3.session.MediaControllerStub.lambda$onPlayerInfoChangedWithExclusions$9(MediaControllerStub.java:258)
11-03 19:11:19.734 3824 3824 E AndroidRuntime: at androidx.media3.session.MediaControllerStub$$ExternalSyntheticLambda13.run(Unknown Source:4)
11-03 19:11:19.734 3824 3824 E AndroidRuntime: at androidx.media3.session.MediaControllerStub.lambda$dispatchControllerTaskOnHandler$14(MediaControllerStub.java:374)
11-03 19:11:19.734 3824 3824 E AndroidRuntime: at androidx.media3.session.MediaControllerStub$$ExternalSyntheticLambda6.run(Unknown Source:4)
11-03 19:11:19.734 3824 3824 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:942)
11-03 19:11:19.734 3824 3824 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)
11-03 19:11:19.734 3824 3824 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:201)
11-03 19:11:19.734 3824 3824 E AndroidRuntime: at android.os.Looper.loop(Looper.java:288)
11-03 19:11:19.734 3824 3824 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:8061)
11-03 19:11:19.734 3824 3824 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
11-03 19:11:19.734 3824 3824 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:703)
11-03 19:11:19.734 3824 3824 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:911)ra
Media
I will send you the relevant demo via email
Bug Report
- You will email the zip file produced by
adb bugreportto android-media-github@google.com after filing this issue.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.