private int currentSongIndex = -1;
private final Handler handler = new Handler();
private Runnable updateTimeTask = new Runnable() {
@Override
public void run() {
int currentTime = mediaPlayer.getCurrentPosition();
currentTimeView.setText(String.format(Locale.US, "%02d:%02d", currentTime / 1000 / 60, currentTime / 1000 % 60));
seekBar.setProgress(currentTime / 1000);
handler.postDelayed(this, 500);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_player);
musicRetriever = new MusicRetriever();
mediaPlayer = new MediaPlayer();
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setOnCompletionListener(this);
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
mediaPlayer.seekTo(seekBar.getProgress() * 1000);
handler.post(updateTimeTask);
}
});
filenameView = (TextView) findViewById(R.id.filename);
currentTimeView = (TextView) findViewById(R.id.currentTime);
durationView = (TextView) findViewById(R.id.duration);
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
1);
} else {
musicList = musicRetriever.getMusicList();
populateList();
}
}
@Override
public void onPrepared(MediaPlayer mp) {
int duration = mp.getDuration();
durationView.setText(String.format(Locale.US, "%02d:%02d", duration / 1000 / 60, duration / 1000 % 60));
seekBar.setMax(mp.getDuration() / 1000);
playPauseButton.setImageResource(R.drawable.btn_pause);
handler.postDelayed(updateTimeTask, 10);
mp.start();
}
@Override
public void onCompletion(MediaPlayer mp) {
if (currentSongIndex >= musicList.size() - 1) {
handler.removeCallbacks(updateTimeTask);
return;
}
playMusic(currentSongIndex + 1);
}
musicplayer를 재생후 화면을 끄면
seekbar의진행상태는 멈춰있고 textview의 숫자가 초기화되어버립니다
그리고 음악시작을 누르면 새로운게 같이들립니다.