
我希望MediaPlayer接受songTitles的数组列表,并检查传入的歌曲名称,然后播放该歌曲.完成后,我希望它转到循环中的下一个歌曲标题并播放该歌曲.但是,我的代码只播放最后一首歌.
public voID play(Context c, ArrayList<String> songTitles) { stop(); for (String song: songTitles){ if (song.equalsIgnoreCase("shakeItOff")){ mSongPlayer = MediaPlayer.create(c, R.raw.shaketoff); } else if (song.equalsIgnoreCase("dropItLow")){ mSongPlayer = MediaPlayer.create(c, R.raw.dropitlow); } else if (song.equalsIgnoreCase("chachaslIDe")){ mSongPlayer = MediaPlayer.create(c, R.raw.chachaslIDe); } mSongPlayer.setonPreparedListener(new MediaPlayer.OnPreparedListener() { @OverrIDe public voID onPrepared(MediaPlayer mp) { if (mp == mSongPlayer) { mSongPlayer.start(); } } }); mSongPlayer.setonCompletionListener(new MediaPlayer.OnCompletionListener() { @OverrIDe public voID onCompletion(MediaPlayer mp) { stop(); } }); }}解决方法:
您需要使用MediaPlayer.OnCompletionListener在上一个曲目结束时开始新的曲目,因此您可以执行类似以下的 *** 作(我尚未编译它,因此可能存在一些语法错误):
public voID play(final Context c, ArrayList<String> songTitles) { stop(); if (songTitles != null && songTitles.size > 0) { final List<String> playList = new ArrayList<String>(songTitles); String song = playList.get(0); playList.remove(0); mSongPlayer = MediaPlayer.create(c, getSongResourceID(song)); mSongPlayer.setonPreparedListener(new MediaPlayer.OnPreparedListener() { @OverrIDe public voID onPrepared(MediaPlayer mp) { if (mp == mSongPlayer) { mSongPlayer.start(); } } }); mSongPlayer.setonCompletionListener(new MediaPlayer.OnCompletionListener() { @OverrIDe public voID onCompletion(MediaPlayer mp) { stop(); // Recursively call the play() method with one less // track in the List. play(c, playList); } }); } } public int getSongResourceID(String songTitle) { if (song.equalsIgnoreCase("shakeItOff")){ return R.raw.shaketoff; } else if (song.equalsIgnoreCase("dropItLow")){ return R.raw.dropitlow; } else if (song.equalsIgnoreCase("chachaslIDe")){ return R.raw.chachaslIDe; }}第一次播放时,它将播放列表中的第一首曲目,然后在MediaPlayer.OnCompletionListener中,它递归地调用play()方法,并从列表中删除第一首曲目.这意味着每次调用play()时,列表都会变短,直到到达列表末尾.
总结以上是内存溢出为你收集整理的java-MediaPlayer是否可以播放一个音频文件,完成后可以播放另一个音频文件?全部内容,希望文章能够帮你解决java-MediaPlayer是否可以播放一个音频文件,完成后可以播放另一个音频文件?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)