You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

三星AOD与锁屏媒体元数据显示Unknown问题求助(MediaSessionCompat)

解决三星AOD/锁屏媒体元数据显示Unknown的问题

我之前开发媒体播放应用时,也碰到过和你一模一样的三星设备问题——控件能正常操作,但AOD和锁屏上的标题、专辑始终显示Unknown。结合你的情况,给你几个具体的排查和解决方向:

1. 确认MediaSessionConnector的元数据同步配置

虽然你提到已经正确设置了MediaSession元数据,但如果用MediaSessionConnector关联ExoPlayer和MediaSession,可能存在同步逻辑的疏漏:

  • 检查是否给MediaSessionConnector设置了自定义的MetadataProvider,如果有,要确保getMetadata()方法返回的MediaMetadataCompat对象包含完整的TITLEALBUM等核心字段,必须使用官方常量(比如MediaMetadataCompat.METADATA_KEY_TITLE),不能用自定义键。
  • 如果用默认Provider,试试手动触发元数据同步:在ExoPlayer加载新媒体后,主动调用mediaSessionConnector.setPlayer(exoPlayer)重新绑定,或者直接通过MediaSession手动设置元数据,看是否能显示。

2. 适配三星设备的特殊要求

三星的锁屏和AOD对媒体应用有一些额外的隐性要求:

  • 权限与活跃状态:确保你已经申请了android.permission.READ_MEDIA_AUDIO(Android 13+)或旧版的READ_EXTERNAL_STORAGE权限,并且在播放期间始终保持mediaSession.setActive(true)——哪怕应用退到后台,也不能随意将会话设为非活跃状态。
  • 元数据完整性:部分三星设备要求元数据必须同时包含ARTIST字段才能正常显示标题和专辑,哪怕你不需要显示歌手,也可以填充一个默认值试试。
  • 媒体通知渠道:必须创建专门的媒体通知渠道(NotificationManager.CATEGORY_TRANSPORT),并且确保媒体通知是通过MediaSession关联的,不能用普通通知替代。

3. 排查播放状态与元数据构建逻辑

有时候元数据显示异常是因为播放状态未正确更新:

  • 播放开始时,务必调用mediaSession.setPlaybackState()设置正确的PlaybackStateCompat,包含STATE_PLAYING状态以及播放位置等信息——三星的系统控件可能需要完整的状态信息才会渲染元数据。
  • 检查MediaMetadataCompat的构建方式:使用BuilderputTitle()putAlbum()等专用方法,而不是通用的putString(),确保元数据对象是通过build()方法正确生成的不可变实例。示例代码:
    val mediaMetadata = MediaMetadataCompat.Builder()
        .putTitle("测试歌曲标题")
        .putAlbum("测试专辑名称")
        .putArtist("测试歌手")
        .build()
    mediaSession.setMetadata(mediaMetadata)
    

4. 排除后台进程限制

三星的电池优化机制可能会在后台限制应用的MediaSession更新:

  • 进入手机设置的「电池与设备维护」→「电池」→「后台限制」,找到你的应用并关闭限制;
  • 同时将应用加入电池优化白名单,避免系统在后台暂停应用的元数据更新逻辑。

你可以先从手动设置MediaSession元数据开始测试,排除ExoPlayer Connector的影响,如果手动设置后能正常显示,那问题大概率出在Connector的同步配置上。如果还是不行,再检查三星的权限和后台限制。

内容的提问来源于stack exchange,提问作者Ivan

火山引擎 最新活动