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

Mp3 Seek bar 구현 도와주세요.

0 추천
  seekBar1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
         
         
   
   @Override
   public void onStopTrackingTouch(SeekBar seekBar) {
    // TODO Auto-generated method stub
    if (mp.isPlaying())
     mp.start();
   }
   
   @Override
   public void onStartTrackingTouch(SeekBar seekBar) {
    // TODO Auto-generated method stub
    
    if (mp.isPlaying()){
     mp.pause();
   }
   }
   
   @Override
   public void onProgressChanged(SeekBar seekBar, int progress,
     boolean fromUser) {
    // TODO Auto-generated method stub
    if(fromUser)
     if (mp != null && fromUser)
      mp.seekTo(progress);
   
  }
        
 });
    }

그리고 음악을 재생하는 부분쪽에도 seekBar1.setProgress(mp.getCurrentPosition());위치 기록 정지하는 부분에  mp.seekTo(0);  

SD카드에서 불러 온 음악을 재생하는 프로그램에서 위와 같은 코드를 사용하여서 Seek Bar를 구현하려 하였습니다.

그러나 Seek bar는 모양만 있고 제대로 동작하지 않았고 음악이 재생되고 있을때 Seek BAR를 조작하게 되면 음악이 멈추게 되었습니다.. 

 

안드로이드 교재를 응용해서 만드는데 쉽지가 않네요.. 좋은 방법 없을까요.

 

 

wasingtonz (390 포인트) 님이 2014년 8월 21일 질문

2개의 답변

0 추천
 
채택된 답변
private static Handler seekHandler = new Handler();
...
...

seekBar1.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) {
	        	mp.seekTo(progress);
	        	seekBar.setProgress(progress);
	        }
	 });
    //Play music
    public static void play(){
            try {
				mp.prepare();
			} catch (IllegalStateException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
        mp.start();
        seekHandler.postDelayed(run, 1000);
    }
    
    public static void pause() {
    	try {
    		mp.pause();
    		} catch (IllegalStateException e) {
    			e.printStackTrace();
    	}
    }

	private static Runnable run = new Runnable() {

	    public void run() {
	        if(mp.isPlaying()){

	        int mediaPos_new = mp.getCurrentPosition();
	        int mediaMax_new = mp.getDuration();
	        
	        seekBar1.setMax(mediaMax_new);
	        seekBar1.setProgress(mediaPos_new);

	        seekHandler.postDelayed(run, 1000); //Looping the thread after 0.1 second // seconds
	        }  
	    }
	};

	public void onPrepared(MediaPlayer arg0) {  
	  // TODO Auto-generated method stub  
	  duration = mp.getDuration();  
	  seekBar1.setMax(duration);  
	  seekBar1.postDelayed(run, 1000);  
	 }  

 

이렇게 해보세요

ontwikkelaar (2,260 포인트) 님이 2014년 8월 23일 답변
wasingtonz님이 2014년 8월 25일 채택됨
제것과는 형식이 달라 그대로 적용을 하지못해 일부분만 적용했습니다.
적용후 실행한 후 문제있으면 다시 질문올릴게요.
0 추천
이 튜토리얼이면 충분한 수준정도는 가능하실듯
http://www.androidhive.info/2012/03/android-building-audio-player-tutorial/
쭈쭈총각 (17,750 포인트) 님이 2014년 8월 21일 답변
음... MP3제작 듀토리얼이네요.. 시크바에 대한 내용만 정리 된 것은 없나요..?
시크바만 따로 응용하셔서 보시면 될텐데...
...