【发布时间】:2016-07-18 13:39:48
【问题描述】:
我刚刚开始 Android 开发和 Java,这是我第一个熟悉 Android 开发的应用程序。我几乎完成了这个应用程序,唯一剩下的就是随机播放歌曲。我尝试了许多步骤来正确解决问题,并且我已经在网络和 SO 上搜索了相关问题,但我仍然无法正确解决。
这段代码在我的 Service 类中,播放列表是从 Main Activity 传递的:
public void setPlayList(ArrayList<SongModel> playlist) {
playList = playlist;
//Arraylist of integer to hold the number of indices
list = new ArrayList<Integer>();
for(int i =0; i <= playList.size();i++){
list.add(i);
}
Collections.shuffle(list, new Random(System.nanoTime()));
}
下面的代码是歌曲的播放方式,这个 sn-p 在 configPlayBack() 方法中,从歌曲 id 播放歌曲:
long item = 0;
item = playList.get(MusicPref.isShuffle(this)? list.get(position): position).getSongId();
播放下一首歌曲的 sn-p 是:
public void playNext() {
position++;
if (position >= playList.size()) {
position = 0;
}
configPlayBack();
}
但歌曲仍在连续播放。
编辑:
public void configPlayBack(){
prepared = true;
player.reset();
if ( playList.size()>0){
long item = 0;
item = playList.get(MusicPref.isShuffle(this)? list.get(position):position).getSongId();
playItem(item);
}
}
public void playItem(long item){
Uri base = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Uri trackUri = ContentUris.withAppendedId(base, item);
try{
player.setDataSource(getApplicationContext(), trackUri);
}
catch(Exception e){
Log.e(TAG, "Errror setting data source", e);
}
try{
player.prepare();
}
catch(Exception ee)
{
ee.printStackTrace();
Log.e(TAG, "Error setting data source", ee);
Toast.makeText(getApplicationContext(), "Song corrupt or not supported", Toast.LENGTH_SHORT).show();
ee.printStackTrace();
isReady = false;
}
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
isReady = true;
setPlayState();
getAudioFocus();
mp.start();
updateNotificationPlayer();
updatePlayback();
updateSeek();
player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
isReady = false;
mp.reset();
playNext();
}
});
}
});
}
【问题讨论】:
-
发布你的整个播放方法
-
我已经对其进行了编辑以包含播放方法@Murat K.
标签: android random shuffle indices android-music-player