首页 > 解决方案 > 如何进行 kotlin mediaPlayer 随机播放

问题描述

我正在尝试为音乐播放器应用程序创建随机播放模式。问题是; 我列表中的声音只播放一次,完成后停止。但我希望我列表中的所有声音都被随机播放并自动播放。我对 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()
        }

    }

}

标签: kotlinandroid-mediaplayer

解决方案


添加一个完成监听器,它释放原始播放器并创建一个新播放器。

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

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

我没有测试这段代码。抱歉有任何错误。

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()
    }

}

推荐阅读