我正在制作一个游戏,我希望有一个歌曲列表在后台播放,并在它们全部播放完后循环播放。为此,我循环创建MediaPlayer
s 并调用setNextMediaPlayer
列表中的下一个玩家,除非它是最后一项;然后我将其设置回列表中的第一项。这可行,但是当它循环并尝试再次播放第一首歌曲时,它告诉我我play()
在无效状态下调用了。所以我添加了一个,OnCompleteListener
所以当一首歌结束时我prepare()
再次调用它,但这并没有帮助。我需要对MediaPlayer
已经结束的游戏做些什么才能让它再次播放?
-= UPDATE =- 这是我的初始化代码MediaPlayers
(减去 try 和 catch,因为这只会把它弄乱):
String[] assets = manager.list("songs");
Collections.shuffle(Arrays.asList(assets));
for(String name : assets)
{
MediaPlayer player = new MediaPlayer();
AssetFileDescriptor descriptor = manager.openFd("songs/"+name);
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
player.setOnCompletionListener(_reset);
player.prepare();
if(_songs.size() > 0)
{
_songs.get(_songs.size() - 1).setNextMediaPlayer(player);
}
_songs.add(player);
}
_songs.get(_songs.size() - 1).setNextMediaPlayer(_songs.get(0));