Ich starte gerade Android-Entwicklung und Java, und dies ist meine erste App, um Android-Entwicklung kennen zu lernen. Ich bin fast fertig mit der App, das einzige, was übrig bleibt, sind schlurfende Songs. Ich habe viele Schritte ausprobiert, um es richtig zu machen, und ich habe das Web und SO nach verwandten Fragen durchforstet, aber ich kann es immer noch nicht richtig machen.Shuffle Songs in Musik-Player
Dieser Code-Schnipsel in meiner Dienstklasse, Playlist von Hauptaktivität geführt wird:
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()));
}
Der folgende Code wird wie Songs gespielt werden, ist dieser Ausschnitt in configPlayBack() -Methode, die das Lied spielt aus der Song-ID:
long item = 0;
item = playList.get(MusicPref.isShuffle(this)? list.get(position): position).getSongId();
das snippet für den nächsten Song zu spielen ist:
public void playNext() {
position++;
if (position >= playList.size()) {
position = 0;
}
configPlayBack();
}
Aber die Songs spielen immer noch seriell.
EDIT:
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();
}
});
}
});
}
posten Sie Ihre gesamte Wiedergabemethode –
ich es bearbeitet haben die Wiedergabemethode @Murat K. –