首页 > 解决方案 > 如何连续播放原始文件夹中的歌曲,并且不循环播放

问题描述

我是新手,你能帮帮我吗?我想按顺序播放我的原始文件夹中的所有歌曲,在所有歌曲播放完之后我不想循环播放。

我已经尝试过这段代码,但是在播放所有歌曲后它一直在循环{

int [] sound;
int soundke = 0;
MediaPlayer mediaPlayer;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_kubus);

    sound = new int[] {R.raw.swoosh2, R.raw.swoosh1, R.raw.swoosh2};

    mediaPlayer = MediaPlayer.create(kubus.this, sound[0]);

    mediaPlayer.start();

    mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            play();

        }
    });

}

private void play () {
    soundke = (soundke + 1) % 3;
    AssetFileDescriptor afd = this.getResources().openRawResourceFd(sound[soundke]);

    try {
        mediaPlayer.reset();
        mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength());
        mediaPlayer.prepare();
        mediaPlayer.start();
        afd.close();
    } catch (IOException e) {

    }
}

在所有歌曲播放后它仍然保持循环。我不想在播放完所有歌曲后循环播放,谢谢你的帮助

标签: androidarraysaudiomedia-player

解决方案


  int [] sound;
    int soundke = 0;
    MediaPlayer mediaPlayer;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_kubus);

        sound = new int[] {R.raw.swoosh2, R.raw.swoosh1, R.raw.swoosh2};

        mediaPlayer = MediaPlayer.create(kubus.this, sound[0]);
        mediaPlayer.setLooping(false);
        mediaPlayer.start();

        mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                if(soundke < sound.length-1){
                   play(++soundke);
                }else{
                    soundke=0; 
                    mediaPlayer.stop();    
}
            }
        });

    }

    private void play (int track) {
        //soundke = (soundke + 1) % 3;
        AssetFileDescriptor afd = this.getResources().openRawResourceFd(sound[track]);

        try {
            mediaPlayer.reset();
            mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength());
            mediaPlayer.setLooping(false);
            mediaPlayer.prepare();
            mediaPlayer.start();
            afd.close();
        } catch (IOException e) {

        }
    }

推荐阅读