如何播放歌曲数组中的下一首随机歌曲

How to play next random song of the array of songs

我有一组歌曲,当 activity 打开时,我的应用会随机播放歌曲,但当歌曲播放完毕后,我想从数组中随机播放另一首歌曲,有人可以帮忙吗?

public MediaPlayer mediaPlayer;
private int songs[];


songs = new int[] {
    R.raw.track1,
    R.raw.track2,
    R.raw.track3,
    R.raw.track4,
    R.raw.track5,
    R.raw.track6,
    R.raw.track7,
    R.raw.track8,
    R.raw.track9,
    R.raw.track10,
    R.raw.track11,
    R.raw.track12,
    R.raw.track13,
    R.raw.track14,
    R.raw.track15,
    R.raw.track16,
    R.raw.track17,
};


int randomSong =  new Random().nextInt(songs.length);
mediaPlayer = MediaPlayer.create(this, songs[randomSong]);
mediaPlayer.start();

你需要设置一个completion listener:

mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    void onCompletion(MediaPlayer mp) {
        // Play next song
    }
});

试试这个,你需要实现 MediaPlayer.OnCompletionListener 接口 在你的 activity

public class MainActivity extends AppCompatActivity implements MediaPlayer.OnCompletionListener {
    private MediaPlayer mediaPlayer;
    private int songs[];
    private int randomSong;
    private Random random = new Random();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mediaPlayer.setOnCompletionListener(this);
        songs = new int[]{
                R.raw.track1,
                R.raw.track2,
                R.raw.track3,
                R.raw.track4,
                R.raw.track5,
                R.raw.track6,
                R.raw.track7,
                R.raw.track8,
                R.raw.track9,
                R.raw.track10,
                R.raw.track11,
                R.raw.track12,
                R.raw.track13,
                R.raw.track14,
                R.raw.track15,
                R.raw.track16,
                R.raw.track17,
        };


        randomSong = getRandom(songs);
        mediaPlayer = MediaPlayer.create(this, songs[randomSong]);
        mediaPlayer.start();
    }

    @Override
    public void onCompletion(MediaPlayer mediaPlayer) {
        randomSong = getRandom(songs);
        mediaPlayer = MediaPlayer.create(this, songs[randomSong]);
        mediaPlayer.start();
    }

    public int getRandom(int[] array) {
        return random.nextInt(array.length);
    }
}

歌曲播放完毕后,您可以使用监听器 运行 回调:

setOnCompletionListener(MediaPlayer.OnCompletionListener listener)

此外,为确保随机性,我强烈建议您不要在每次需要随机数时都使用新的 Random 对象。相反,声明一个变量 random 并将其用于您所有的随机性需求。