Media3 ExoPlayer通知进度条显示失败及依赖错误解决求助
解决ExoPlayer通知进度条不显示及MediaSessionCompat依赖错误问题
一、修复依赖错误
你遇到的Cannot access class 'android.support.v4.media.session.MediaSessionCompat.Token'错误,是因为项目采用AndroidX架构,但引用了旧版support库的API。解决步骤:
确认AndroidX配置
检查项目根目录的gradle.properties,确保以下配置存在:android.useAndroidX=true android.enableJetifier=true添加AndroidX Media依赖
在app/build.gradle的dependencies块中添加AndroidX的Media库(使用最新稳定版即可):implementation "androidx.media:media:1.6.0"替换MediaSessionCompat导入
确保代码中导入的是AndroidX版本的MediaSessionCompat:import androidx.media.session.MediaSessionCompat此时获取Token的方式应为
mediaSession.token(而非旧版的sessionCompatToken)。
二、配置通知显示进度条
你的代码中setUseChronometer(true)会强制显示计时器而非进度条,这是进度条不显示的核心原因。修改后的完整配置如下:
PlayerNotificationManager.Builder( context, NOTIFICATION_ID, NOTIFICATION_CHANNEL_ID ) .setMediaDescriptionAdapter( NotificationDescriptorAdapter( context = context, pendingIntent = mediaSession.sessionActivity ) ) .setSmallIconResourceId(R.drawable.ic_icon_play_arrow) .build() .also { it.setUseFastForwardActionInCompactView(true) it.setUseRewindActionInCompactView(true) // 关闭计时器,开启进度条显示 it.setUseChronometer(false) it.setUseNextActionInCompactView(false) it.setUsePreviousActionInCompactView(false) it.setUseNextAction(false) it.setUsePreviousAction(false) it.setPriority(NotificationCompat.PRIORITY_LOW) it.setColorized(false) it.setVisibility(NotificationCompat.VISIBILITY_PUBLIC) // 设置AndroidX版本的MediaSession Token it.setMediaSessionToken(mediaSession.token) it.setPlayer(player) }
三、额外注意事项
- 确保ExoPlayer实例已正确加载媒体资源,只有当媒体有有效时长时,进度条才会显示。
- 若仍不显示进度条,可检查
NotificationDescriptorAdapter是否正确实现了MediaDescriptionAdapter的所有方法,特别是getCurrentContentDuration是否返回了正确的媒体时长。
内容的提问来源于stack exchange,提问作者Ajay
相关产品推荐
相关产品推荐

