그래서 내가 가지고있는 문제는 내가 노래의 끝에 내 검색 막대를 드래그 할 때, 그것은 일부 곡에서 작동하고 난 다음 단계로 이동하지만, 때로는 노래를 건너 뛰고 재생을 중지합니다. 예;재생 다음 곡 oncompletion
임 노래 노래가 recyclerview에 표시되는 클릭하면 내 songactivity 내 mainactivity에서 전달되는 "위치 1"에서.
난 끝까지 내 검색 막대를 드래그 할 때, 그것은 2로 이동 한 후 3, 4, 그러나 위치이 발생합니다 5.
에서 노래를 재생하지 않았다, 그래서 그것은, 6으로 건너 뜁니다 내 seekbar를 노래의 끝으로 끌면 다음 및 이전 버튼이 작동합니다. 내 songActivity
mCurrentIndex = (int) b.get("songIndex");
if (mediaPlayer.isPlaying()){
mBtnPlayPause.setImageResource(R.drawable.ic_action_pause_white);
updateProgressBar();
}
tvSongListSize.setText((songIndex + 1) + "/" + songList.size());
mBtnShuffle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isShuffle){
isShuffle = false;
Toast.makeText(getApplicationContext(), "Shuffle is off", Toast.LENGTH_SHORT).show();
mBtnShuffle.setImageResource(R.drawable.ic_action_shuffle);
}else{
isShuffle = true;
Toast.makeText(getApplicationContext(), "Shuffle is on", Toast.LENGTH_SHORT).show();
mBtnShuffle.setImageResource(R.drawable.ic_shuffle_on);
isRepeat = false;
mBtnRepeat.setImageResource(R.drawable.ic_action_repeat);
}
}
});
mBtnRepeat.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isRepeat){
isRepeat = false;
Toast.makeText(getApplicationContext(), "Repeat is off", Toast.LENGTH_SHORT).show();
mBtnRepeat.setImageResource(R.drawable.ic_action_repeat);
}else{
isRepeat = true;
Toast.makeText(getApplicationContext(), "Repeat is on", Toast.LENGTH_SHORT).show();
mBtnRepeat.setImageResource(R.drawable.ic_repeat_on);
isShuffle = false;
mBtnShuffle.setImageResource(R.drawable.ic_action_shuffle);
}
}
});
mBtnPlayPause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
if (mediaPlayer != null) {
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause();
mBtnPlayPause.setImageResource(R.drawable.ic_action_play);
} else {
mediaPlayer.start();
mBtnPlayPause.setImageResource(R.drawable.ic_action_pause_white);
}
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mBtnPlayPause.setImageResource(R.drawable.ic_action_play);
}
});
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
mBtnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
nextSong();
}
});
mBtnPrev.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
prevSong();
}
});
}
private void playSongNumber(int index) {
try{
mediaPlayer.reset();
mediaPlayer.setDataSource(songList.get(index).getData());
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
seekBar.setProgress(0);
seekBar.setMax(100);
updateProgressBar();
}catch (Exception e){
e.printStackTrace();
}
}
private void nextSong(){
mCurrentIndex++;
mCurrentIndex %= songList.size();
playSongNumber(mCurrentIndex);
mBtnPlayPause.setImageResource(R.drawable.ic_action_pause_white);
tvSongListSize.setText((mCurrentIndex + 1) + "/" + songList.size());
Toast.makeText(getApplicationContext(), "You Clicked position: " + mCurrentIndex + " " + songList.get(mCurrentIndex).getData(), Toast.LENGTH_SHORT).show();
}
private void prevSong(){
mCurrentIndex = mCurrentIndex > 0 ? mCurrentIndex - 1 : songList.size() - 1;
playSongNumber(mCurrentIndex);
mBtnPlayPause.setImageResource(R.drawable.ic_action_pause_white);
tvSongListSize.setText((mCurrentIndex + 1) + "/" + songList.size());
Toast.makeText(getApplicationContext(), "You Clicked position: " + mCurrentIndex + " " + songList.get(mCurrentIndex).getData(), Toast.LENGTH_SHORT).show();
}
@Override
public void onCompletion(MediaPlayer mp) {
if (isRepeat){
playSongNumber(mCurrentIndex);
}else if(isShuffle){
Random random = new Random();
mCurrentIndex = random.nextInt((songList.size() - 1) + 1);
tvSongListSize.setText((mCurrentIndex + 1) + "/" + songList.size());
playSongNumber(mCurrentIndex);
}else if (mCurrentIndex < songList.size()-1){
nextSong();
tvSongListSize.setText((mCurrentIndex + 1) + "/" + songList.size());
}else{
playSongNumber(0);
tvSongListSize.setText((1) + "/" + songList.size());
}
}
public void updateProgressBar(){
mHandler.postDelayed(mUpdateTime, 100);
}
private Runnable mUpdateTime = new Runnable() {
@Override
public void run() {
long songCurrentTime = mediaPlayer.getCurrentPosition();
long songTotalTime = mediaPlayer.getDuration();
tvSongCurrentTime.setText(""+utilities.msToTimer(songCurrentTime));
tvSongTotalTime.setText(""+utilities.msToTimer(songTotalTime));
int progress = (int)(utilities.getProgressPercentage(songCurrentTime, songTotalTime));
seekBar.setProgress(progress);
mHandler.postDelayed(this, 100);
}
};
건배에서
이 코드
는 또한 노래 (2 번 보여주는 토스트를) 건너 뜁니다 것으로 나타났다.두 번째 문제가
내가 노래를 클릭 해결, 그것은 songActivity로 이동하고 다음 노래는 onCompletion가 호출 될 때 재생,하지만 난 후 일시 정지 버튼을 누른 때 다시 재생 노래가 끝나면 멈추고 다음 노래가 재생되지 않습니다.
셋째
난 내 목록의 마지막 노래에 가서 그렇게 OnCompletion가 호출 밖으로 놀자, 그것은 좋은 내 목록의 첫 번째 노래로 돌아갑니다 문제,하지만 난 이전 버튼을 클릭하여 마지막 노래로 돌아 가면 마지막 노래를 건너 뜁니다. 예 : 마지막 노래가 위치이다 [25], 그 위치에서 노래로 되돌아 간다 완료되면 [0] (첫 노래),하지만이 [24]과 스킵 [25]로 진행 뒤로 '버튼을 클릭하면 (마지막 노래). oncompletion가 호출 될 때
에만 발생합니다.
오류가 발생했습니다. 오류는 내 완료에 있지만 표시되지 않습니다. – Vince