안녕하세요.
음악을 재생시키고 현재 위치에 따른 재생바를 변경하려고 쓰레드 또는 핸들러를 사용해서 하는데 둘다 음악의 재생이 정상적으로 되지 않습니다. 삑하는 소리가 나거나 음악이 중간 중간을 건너 뛰며 재생하는 현상이 발생합니다.
//play 진행 변경
seek.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
if (mPlayer[str] != null) {
mPlayer[str].seekTo(progress);// 이놈이 문제 같네요.. 다시 알아보니...이놈을 주석처리하면 정상 동작하는데..
원하는 위치로 변경이 제대로 안되는 거같네요..
} else {
Toast.makeText(ActivityMainPlay.this,
"PLAY한 상태에서 시간을 조정할 수 있습니다.", Toast.LENGTH_SHORT)
.show();
}
}
});
- 핸들러 사용
Handler mseekPlayHandler = new Handler(){
public void handleMessage(Message msg){
if(mPlayer[str]==null)return;
if(mPlayer[str].isPlaying())
{
seek.setProgress(mPlayer[str].getCurrentPosition());
}
mseekPlayHandler.sendEmptyMessageDelayed(0, 1000);
}
};
- 쓰레드 사용시
class MyThread implements Runnable {
int maxTime = mPlayer.getDuration();
int braekTime = 0;
public void run() {
// TODO Auto-generated method stub
while (braekTime == 0) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (mPlayer == null) {
braekTime = 1; //
// seek.setProgress(1);
} else {
int aaa = mPlayer.getCurrentPosition();
Log.d("aaa", Integer.toString(aaa));
seekPlay.setProgress(mPlayer.getCurrentPosition());
}
}
}
}
음.. 문제가 무엇일까요? 조언 부탁드립니다.