[英]Playing songs one after another in Android(Java)
我想在我的音乐播放器应用程序中一首又一首地播放歌曲。 我检查了这个问题,但我的音乐播放器只播放下一首歌一次。 之后它停止。 例如,它正在播放歌曲A,然后它会播放下一首歌曲B,但在歌曲B之后它不会播放歌曲C。
这是我的代码:
OnCompleteListener:
//mp is MediaPlayer object, al is ArrayList of songs and their ids(R.raw.song), song_no is the index of the song in al
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
song_no = (song_no +1) % al.size();
playSong();
}
});
我对“下一个”按钮有相同的代码,它可以完美地工作,即使在到达列表末尾后它也会循环回来。 播放歌曲 function:
public void playSong()
{
song = Uri.parse("android.resource://" + getPackageName() + "/" + al.get(song_no).id());
try
{
mp.stop();
mp.reset();
mp.release();
mp = null;
}
catch(Exception e)
{
Log.d("playSong", e.toString();
}
mp = MediaPlayer.create(getApplicationContext(), song);
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
}
我尝试删除mp.reset()
、 mp.release()
和mp = null
但它仍然只播放了下一首歌曲。
看起来你想要一个Queue数据结构,希望它比跟踪索引更容易处理。 您的al
变量将存储要播放的歌曲队列,在您的onCompletion
方法中,您可以调用playNextSong()
方法,该方法使用poll()
或remove()
处理队列以获取下一首歌曲并播放直到队列为空。
如果您想保留您的 ArrayList,请尝试调试您的song_no
和song
变量以缩小问题是否出在歌曲顺序逻辑或 MediaPlayer 使用中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.