마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Mediaplayer Handler이용해서 재생시간 표시

0 추천

Mediapler , Handler , Seekbar 사용해서 간단하게 음악재생 시키는 예제 만들어 보려고하는대

음악재생과 Seekbar연동까지는 성공했는대 

Seekbar 밑에 텍스트로  "현재시간 / 음악파일 총재생시간" 이렇게 핸들러 사용해서 나타내고 싶은대 아래처럼 코드를 작성햇더니 엄청 버벅거리 더라구요.

제가 아직 Handler 사용법이 익숙치 않아서 그런데 해결방법 좀 도와주세요ㅜㅜ

 

class MyThread extends Thread {
    @Override
    public void run() {
        while (isPlaying) {
            seekBar.setProgress(mediaPlayer.getCurrentPosition());
            handler.sendEmptyMessage(0);
        }
    }
}

@SuppressLint("HandlerLeak")
Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        if (msg.what == 0) {
            time.setText(mediaPlayer.getCurrentPosition()/1000 + "/" + mediaPlayer.getDuration()/1000);
        }
    }
};
sdfa1234 (280 포인트) 님이 2017년 12월 25일 질문

1개의 답변

0 추천
MyThread 에서 무한정 handler를 호출해서 문제인 듯 합니다.

handler.sendEmptyMessage(0); 를 start가 호출 될 때 한번만 불리게 하고, 아래와 같이 바꿔 보세요.

 

@SuppressLint("HandlerLeak")

Handler handler = new Handler() {

    @Override

    public void handleMessage(Message msg) {

        if (msg.what == 0) {

            seekBar.setProgress(mediaPlayer.getCurrentPosition());

            time.setText(mediaPlayer.getCurrentPosition()/1000 + "/" + mediaPlayer.getDuration()/1000);

          if(isPlaying)

               sendEmptyMessageDelayed(0, 1000 /* 1초에 한번 재 실행 */);

          }

    }

};
익명사용자 님이 2017년 12월 27일 답변
감사합니다. 알려주신대로 해봤는대 해결되진 않내요 ㅜㅜ
...