2012-01-20 3 views
3

나는 sdcard에서 노래를 재생 중입니다.검색 바를 오디오 노래와 동기화합니다.

잘 재생됩니다. 나는 사용자가 seekbar를 움직일 때 노래가 seek bar 위치에 따라 forward되거나 rewnided되도록 seekbar를 구현하려고 시도했다. 지금까지 내가 노래 위치에서하지 시작 내가 클릭 한에서 연주지고에서 SeekBar를 클릭하는 위치

여기에 이제 코드

public class ViewAudio extends Activity implements OnSeekBarChangeListener,OnSeekCompleteListener,OnCompletionListener,OnPreparedListener{ 
@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.audio_player); 

     System.gc(); 
     Intent i = getIntent(); 
     Bundle extras = i.getExtras(); 
     filename = extras.getString("audiofilename"); 

     try { 
      mPlayer.setDataSource(filename); 
     } catch (IllegalArgumentException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IllegalStateException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     try { 
      mPlayer.prepare(); 
     } catch (IllegalStateException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


     mPlayer.setOnCompletionListener(this); 
     mPlayer.setOnPreparedListener(this); 
     mPlayer.setOnSeekCompleteListener((OnSeekCompleteListener) this); 

     mPlayer.start(); 

     TextView tv=(TextView) findViewById(R.id.file); 
     tv.setText("Playing "+filename); 

     seekbar = (SeekBar)findViewById(R.id.seekBar1); 
     mPlay = (Button)findViewById(R.id.play); 
     mPause = (Button)findViewById(R.id.pause); 

     seekbar.setProgress(0); 
     seekbar.setOnSeekBarChangeListener(this); 
     total = mPlayer.getDuration(); 

    } 
@Override 
public void onProgressChanged(SeekBar seekBar, int progress, 
     boolean fromUser) { 
    Log.d("Progres changed",""+progress); 

    if(fromUser){ 
     mPlayer.seekTo(progress); 
     seekbar.setProgress(progress); 

    } 

} 

} 

입니다. 그리고 그것은 노래에 따라 움직이지 않습니다.

아무도 도와주세요.

답변

3

나는 그것을 풀었다. 노래 위치를 매초 확인하고 노래 위치에 따라 검색 바를 움직이는 스레드를 만듭니다.

mediaPos = mplayer.getCurrentPosition(); 
    mediaMax = mplayer.getDuration(); 

    seekbar.setMax(mediaMax); // Set the Maximum range of the 
    seekbar.setProgress(mediaPos);// set current progress to song's 

    handler.removeCallbacks(moveSeekBarThread); 
    handler.postDelayed(moveSeekBarThread, 100); //cal the thread after 100 milliseconds 


} 
    /** 
* The Move seek bar. Thread to move seekbar based on the current position 
* of the song 
*/ 
private Runnable moveSeekBarThread = new Runnable() { 
    public void run() { 
      if(mplayer.isPlaying()){ 

      int mediaPos_new = mPlayer.getCurrentPosition(); 
      int mediaMax_new = mPlayer.getDuration(); 
      seekbar.setMax(mediaMax_new); 
      seekbar.setProgress(mediaPos_new); 

      handler.postDelayed(this, 100); //Looping the thread after 0.1 second 
    } 

    } 
}; 
관련 문제