我有自己的媒体播放应用程序 - 它使用MediaSessionCompat
(与ExoPlayer
及其MediaSessionConnector
插件结合使用)。
在三星手机上,我遇到AOD(Always On Display)和锁定屏幕的小问题。两者都包含一个小媒体控制器(三个按钮)和曲目标题和专辑 - 我认为它适用于MediaSession。
我的问题是它总是显示标题/专辑的未知/未知(但按钮工作正常)。我确信我正确地提供MediaSession元数据,因为它在“活动”中使用,其中使用onMetadataChange
回调且包含正确的标题。
我不知何故失去了,不确定在哪里寻找问题和修复。它显然在我的应用程序中,因为其他玩家工作正常(在AOD上显示标题),但我不知道除了MediaSession中的设置元数据我还需要做什么?
答案 0 :(得分:3)
很快
Exoplayer使用MediaDescriptionCompat
从播放队列中获取元数据。然后将其映射到MediaMetadataCompat
,并将标题映射到密钥MEDIA_KEY_DISPLAY_TITLE
,其中三星仅使用密钥MEDIA_KEY_TITLE
。
解决方法是将MEDIA_KEY_TITLE
添加到MediaDescriptionCompat.extras
。
三星AOD中显示的另一个项目,锁定屏幕为MediaMetadataCompat.METADATA_KEY_ARTIST
Android中无用复杂性的另一个例子 - 为什么我们需要两个元数据类,几乎相同MediaMetadataCompat
vs MediaDescriptionCompat
?
答案 1 :(得分:0)
@Ivan 的回答对我有用。这是 Kotlin 中的一个示例:
mediaSessionConnector = MediaSessionConnector(mediaSession).also {
it.setPlayer(player)
}
mediaSessionConnector.setQueueNavigator(object : TimelineQueueNavigator(mediaSession){
override fun getMediaDescription(player: Player, windowIndex: Int): MediaDescriptionCompat {
val extra = Bundle()
extra.putString(MediaMetadataCompat.METADATA_KEY_ARTIST, "podcastEpisode")
return MediaDescriptionCompat.Builder().setExtras(extra).setTitle("podcastTitle").build()
}
})
这个issue也很有帮助。