【问题标题】:How to play next random song of the array of songs [duplicate]如何播放歌曲数组中的下一首随机歌曲[重复]
【发布时间】:2018-06-09 01:39:40
【问题描述】:

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

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();

【问题讨论】:

  • 你的代码有什么问题?

标签: android arrays random int next


【解决方案1】:

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

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);
    }
}

【讨论】:

  • OP 已经在使用随机函数了
  • 每次调用方法时使用一个新的 Random 对象是个坏主意
  • 感谢您的指出。我已经编辑了我的答案
  • @Abhay 你有,但你仍在创建新的 Random 对象。添加 Random random = new Random() 作为 MainActivity 的成员并使用它。
  • @AbhayTomar 在您的 getRandom() 方法中,每次调用时都会实例化一个新的 Random 对象。引入 int randomSong 没有区别。相反,声明一个私有 Random 随机数,初始化一次,每次在 getRandom() 中使用它。
【解决方案2】:

你需要设置一个completion listener:

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

【讨论】:

    【解决方案3】:

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

    setOnCompletionListener(MediaPlayer.OnCompletionListener listener)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多