【发布时间】:2020-09-29 22:35:58
【问题描述】:
所以我正在尝试播放用户选择的特定歌曲组合。我正在制作一个字符串数组,这些字符串是应该在 MediaPlayer 中播放的文件名。问题是所有歌曲同时播放。我已经尝试了所有方法,但仍然不知道如何确保播放器在开始另一首歌曲之前等待一首歌曲结束。
这是我尝试过的:
public void play(View v){
if(player==null)
{
while(true) {
if(i==brojac) break; //checking if the arraylist has ended
if(player.isPlaying()==false) {
i++;
String s = lista.get(i).toString();
player = MediaPlayer.create(this, (this.getResources().getIdentifier(s, "raw", this.getPackageName())));
player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
stopPlayer();
}
});
player.start();
}
}
}
}
private void stopPlayer()
{
if(player!=null)
{
player.release();
player=null;
}
}
编辑
下面的答案一切正常,但玩家有明显的差距。我已经用 setNextPlayer() 函数解决了这个问题,但是由于在播放时重新创建播放器,应用程序崩溃了。
void playSong(int currentSong) {
player = MediaPlayer.create(this, currentSong);
player1 = MediaPlayer.create(this,this.getResources().getIdentifier(lista.get(i+1).toString(),"raw",getPackageName()));
player.setNextMediaPlayer(player1);
player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
player.release();
i++;
if(i==brojac) return;
player1.start();
playSong(MainActivity.this.getResources().getIdentifier(lista.get(i).toString(),"raw",getPackageName()));
}
});
if(i==0) {
player.start();
}
}
【问题讨论】:
标签: java android android-mediaplayer windows-media-player