I would like to have the mediaplayer
play the next song, and have the seekbar continuously go forward. However, right now the seekbar resets back to 0 when the next song is played.
How would I have the seekBar not reset back to 0 when the next song is played?
Here is my onCompletion
method:
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
mp.release();
if(currentTrack < tracks.length) {
currentTrack++;
if (currentTrack >= 2) {
currentTrack = 0;
}
mp = MediaPlayer.create(this, tracks[currentTrack]);
mp.setOnCompletionListener(this);
if (currentTrack > 0) {
mp.seekTo(tracks[currentTrack]);
}
handler.post(UpdateSongTime);
mp.start();
}
}
Here is the thread that updates all of the positioning:
private Runnable UpdateSongTime = new Runnable() {
@Override
public void run() {
if(mp.isPlaying()) {
startTime = mp.getCurrentPosition() / 1000;
seekBar.setMax(songEndTime);
int currentSongEndTime = songEndTime - mp.getCurrentPosition()/1000;
startTimeText.setText(convertSeekLength(startTime));
String endTime = "-" + convertSeekLength(currentSongEndTime);
songDisplay.setText(songArrayList.get(currentTrack).getTitle());
endTimeText.setText(endTime);
seekBar.setProgress(startTime);
handler.postDelayed(this, 100);
}
}
};
Just created a solution myself that involves creating an Arraylist of mediaPlayers
instead of just making one mediaPlayer
.
Here is the working code if anyone needs it:
public void onCompletion(MediaPlayer mediaPlayer) {
for(int i = 0; i < currentTrack; i++) {
trueSeek += mediaPlayers.get(i).getCurrentPosition();
}
currentTrack++;
if(currentTrack >= mediaPlayers.size()){
currentTrack = 0;
}
handler.post(UpdateSongTime);
mediaPlayers.get(currentTrack).start();
}
and the thread:
private Runnable UpdateSongTime = new Runnable() {
@Override
public void run() {
if(currentTrack == 0){
trueSeek = mediaPlayers.get(currentTrack).getCurrentPosition();
startTime = trueSeek;
}
if(currentTrack > 0){
int tempSeek = 0;
for(int i = 0; i < currentTrack; i++){
tempSeek += mediaPlayers.get(i).getCurrentPosition();
}
trueSeek = mediaPlayers.get(currentTrack).getCurrentPosition() + tempSeek;
startTime = trueSeek;
}
seekBar.setMax(songEndTime);
int currentSongEndTime = songEndTime - trueSeek;
startTimeText.setText(convertSeekLength(startTime));
String endTime = "-" + convertSeekLength(currentSongEndTime);
songDisplay.setText(songArrayList.get(currentTrack).getTitle());
endTimeText.setText(endTime);
seekBar.setProgress(startTime);
handler.postDelayed(this, 100);
}
};