java-MediaPlayer是否可以播放一个音频文件,完成后可以播放另一个音频文件?

java-MediaPlayer是否可以播放一个音频文件,完成后可以播放另一个音频文件?,第1张

概述我希望MediaPlayer接受songTitles的数组列表,并检查传入的歌曲名称,然后播放该歌曲.完成后,我希望它转到循环中的下一个歌曲标题并播放该歌曲.但是,我的代码只播放最后一首歌.publicvoidplay(Contextc,ArrayList<String>songTitles){stop();for(Stringsong:s

我希望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是否可以播放一个音频文件,完成后可以播放另一个音频文件?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1079711.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存