我该怎么做 kotlin mediaPlayer 随机播放

How can I do the kotlin mediaPlayer shuffle play

我正在尝试为音乐播放器应用程序创建随机播放模式。问题是;我列表中的声音只播放一次并在结束时停止。但我希望列表中的所有声音都能自动随机播放。我对 Android 编程很陌生,我很努力但失败了。我还尝试了 setOnCompletionListener {} 方法,但它没有用。我需要帮助。谢谢大家

这是我的示例代码;

class MainActivity : AppCompatActivity() {

    var mediaPlayer = MediaPlayer()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val Sound1 = R.raw.sound01
        val Sound2 = R.raw.sound02
        val Sound3 = R.raw.sound03
        val Sound4 = R.raw.sound04
        val Sound5 = R.raw.sound05

        val soundList = ArrayList<Int>()
        soundList.add(Sound1)
        soundList.add(Sound2)
        soundList.add(Sound3)
        soundList.add(Sound4)
        soundList.add(Sound5)

        shuffleBtn.setOnClickListener {
            val randomList = Random.nextInt(soundList.size)
            val sound = soundList.get(randomList)
            mediaPlayer = MediaPlayer.create(this, sound)
            mediaPlayer.start()
        }

    }

}

添加释放原始播放器并创建新播放器的完成侦听器。

如果您想随机播放,您需要一个变量来存储随机播放的列表并在播放时删除曲目,以便您知道何时重新随机播放。您选择随机声音的方式,有时您可以连续播放相同的声音两次。

顺便说一下,您可以更简洁地创建列表。

我没有测试这段代码。对于任何错误,我们深表歉意。

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val sounds = listOf(
        R.raw.sound01,
        R.raw.sound02,
        R.raw.sound03,
        R.raw.sound04,
        R.raw.sound05
    )
    
    var shuffledSounds = sounds.shuffled()

    fun newTrack() {
        if (shuffledSounds.isEmpty()) {
            shuffledSounds = sounds.shuffled()
        }
        val nextSound = shuffledSounds.first()
        shuffledSounds = shuffledSounds - nextSound
        mediaPlayer = MediaPlayer.create(this, nextSound).apply {
            setOnCompletionListener{
                it.release()
                newTrack()
            }
            start()
        }
    }

    shuffleBtn.setOnClickListener {
        newTrack()
    }

}