Android ExoPlayer洗牌不';我不能复制所有的歌曲

Android ExoPlayer洗牌不';我不能复制所有的歌曲,android,exoplayer,exoplayer2.x,Android,Exoplayer,Exoplayer2.x,我正在使用exoplayer库创建音乐播放器。一切都很好,除了洗牌,这不是我所期望的行为 我的问题如下: 假设我有5首歌: 歌曲1 歌曲2 歌曲3 歌曲4 歌曲5 我是第一个。然后我点击shuffle按钮并使用exoPlayer.shuffleModeEnabled=true启用shuffled。那么现在的顺序如下: 歌曲4 歌曲2 歌曲5 歌曲1 歌曲3 正如我在歌曲1中所说的,之后它将转到歌曲3,然后它将在不复制歌曲4、2和5的情况下结束。我指定的行为是以随机顺序复制所有歌曲。使用exopl

我正在使用exoplayer库创建音乐播放器。一切都很好,除了洗牌,这不是我所期望的行为

我的问题如下:

假设我有5首歌:

歌曲1

歌曲2

歌曲3

歌曲4

歌曲5

我是第一个。然后我点击shuffle按钮并使用
exoPlayer.shuffleModeEnabled=true
启用shuffled。那么现在的顺序如下:

歌曲4

歌曲2

歌曲5

歌曲1

歌曲3


正如我在歌曲1中所说的,之后它将转到歌曲3,然后它将在不复制歌曲4、2和5的情况下结束。我指定的行为是以随机顺序复制所有歌曲。使用exoplayer有什么方法可以实现这一点吗?

您可以实现自己的ShuffleOrder来实现这一点。一种方法是扩展类并使用成员字段存储起始索引(在您的示例中,它应该是song 1)。您应该重写以下方法:

getNextIndex(int index)
getPreviousIndex(int index)
getFirstIndex()
getLastIndex()
其想法是将其列为循环列表。在您的示例中,假设洗牌顺序为4、2、5、1、3,并且当前正在播放1,则
getFirstIndex()
应返回1,而
getLastIndex()
应返回5。对于
getNextIndex(int-index)
getPreviousIndex(int-index)
,执行它应该执行的操作,但当到达头部/尾部时,只需将其循环

然后,当您想要激活洗牌时,您可以执行以下操作:

concatenatingMediaSource.setShuffleOrder(new MyShuffleOrder());

你找到解决办法了吗?