kotlin - 如何进行 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()
}
}
}
解决方案
添加一个完成监听器,它释放原始播放器并创建一个新播放器。
如果要随机播放,则需要一个变量来存储随机播放列表并在播放时删除曲目,以便知道何时重新随机播放。您选择随机声音的方式,有时您可以连续两次播放相同的声音。
顺便说一句,您可以更简洁地创建列表。
我没有测试这段代码。抱歉有任何错误。
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()
}
}
推荐阅读
- svg - SVG 路径背景
- .net - 预期“MappingStart”,得到“SequenceStart”
- sql - 快速包含另一种类型的先前值
- javascript - javascript(测试对象的属性)
- laravel - 猫头鹰旋转木马吐出单个物品而不是旋转木马
- python - 我正在尝试通过使用当前列表来制作一个大列表,但它不起作用,有人可以解释为什么会发生这种情况吗?
- javascript - 如何在 Sharepoint 中获取文件的文件类型
- javascript - 超过 50 个数据点的 HighChart 中断
- express - axios 没有捕捉到错误
- linux - 什么可能导致跟踪/断点陷阱(核心转储)?