我正在使用MediaSessionConnector来管理媒体会话。我有需要播放的播放列表。为了控制播放列表并在蓝牙设备上显示元数据,我使用了TimelineQueueNavigator。它还假定在设备的锁定屏幕上显示元数据。
val navigator = object: TimelineQueueNavigator(mediaSession) {
override fun getMediaDescription(player: Player?, windowIndex: Int): MediaDescriptionCompat {
val song = mPlaylist[windowIndex]
val bitmap = // get bitmap from somwhere
return MediaMetadataCompat.Builder()
.putString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID, song.id)
.putString(MediaMetadataCompat.METADATA_KEY_ARTIST, song.artist)
.putString(MediaMetadataCompat.METADATA_KEY_TITLE, song.name)
.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, bitmap)
.putBitmap(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON, bitmap)
.build()
}
}
mediaSessionConnector.setQueueNavigator(navigator)
这种方法很好,但需要先加载图像,然后才能分配位图。
有人知道如何管理异步加载图像的getMediaDescription吗?示例将不胜感激。还是需要不同的方法?
答案 0 :(得分:0)
这是项目存储库上的GitHub问题,请参阅this link,以获取完整的对话。
总结起来,这是你可以做到的:
getMediaDescription
中,提供您已经拥有的信息。如果没有图像,请开始异步获取它们。mediaSessionConnector.invalidateMediaSessionQueue()
和mediaSessionConnector.invalidateMediaSessionMetadata()
。这将重新调用getMediaDescription
,您应在其中提供现在拥有的图像。