如何为ExoPlayer的TimelineQueueNavigator加载图像anync?

时间:2019-03-22 11:17:39

标签: android exoplayer2.x

我正在使用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吗?示例将不胜感激。还是需要不同的方法?

1 个答案:

答案 0 :(得分:0)

这是项目存储库上的GitHub问题,请参阅this link,以获取完整的对话。

总结起来,这是你可以做到的:

  1. getMediaDescription中,提供您已经拥有的信息。如果没有图像,请开始异步获取它们。
  2. 当您拥有所有图像时,请调用mediaSessionConnector.invalidateMediaSessionQueue()mediaSessionConnector.invalidateMediaSessionMetadata()。这将重新调用getMediaDescription,您应在其中提供现在拥有的图像。