본문 바로가기

유용한것들

#Note Android MP3 Player example source


package kr.co.bitgo;

import! android.app.Activity;
import! android.media.MediaPlayer;
import! android.media.AudioManager;
import! android.media.MediaPlayer.OnCompletionListener;
import! android.os.Bundle;
import! android.os.Environment;
import! android.view.View;
import! android.view.View.OnClickListener;
import! android.widget.Button;
import! android.widget.ProgressBar;
import! android.widget.SeekBar;
import! android.widget.SeekBar.OnSeekBarChangeListener;
import! android.widget.TextView;

public class Mp3PlayerActivity extends Activity implements OnClickListener, Runnable{
    /** Called when the activity is first created. */
 MediaPlayer mp;
 String path=Environment.getDataDirectory().getAbsolutePath();      //Environment -> 안드로이드 os에 접근할수있는 메서드
    String mp3file="/GoAway.mp3";
    //ProgressBar mpbar;
    SeekBar seekbar, seekvol;
    AudioManager audio;
    Button rw, play, stop, ff;
    TextView t1, t2;
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mp=new MediaPlayer();
        try {
   mp.setDataSource(path+mp3file); // setDataSource -> 경로 설정
   mp.prepare(); // 플레이하기위해서 준비단계
   
   
   rw=(Button) findViewById(R.id.rw);
   play=(Button) findViewById(R.id.play);
   stop=(Button) findViewById(R.id.stop);
   ff=(Button) findViewById(R.id.ff);
   t1=(TextView) findViewById(R.id.t1);
   t2=(TextView) findViewById(R.id.t2);
   
   //mpbar=(ProgressBar) findViewById(R.id.pgbar);
   seekbar=(SeekBar) findViewById(R.id.seekbar);
   seekvol=(SeekBar) findViewById(R.id.seekvolumn);// 볼륨표시를 위해
   audio=(AudioManager) getSystemService(AUDIO_SERVICE);
   
   int aMax=audio.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
   int aVol=audio.getStreamVolume(AudioManager.STREAM_MUSIC);
   seekvol.setMax(aMax);
   seekvol.setProgress(aVol);
   
   
   //쓰레드 생성
   new Thread(Mp3PlayerActivity.this).start();// 자기자신을 start 시켜라
   seekbar.setVisibility(ProgressBar.VISIBLE); // ProgressBar 를 보여달라
   seekbar.setProgress(0);// ProgressBar 의 처음위치는 0
   seekbar.setMax(mp.getDuration()); //mp.getDuration() -> 음악파일의 전체길이
   int kk=seekbar.getMax(); // 전체길이
   int m=kk/60000;
   int s=(kk%60000)/1000;
      t2.setText(m+":"+s);
   
      rw.setOnClickListener(this);
   play.setOnClickListener(this);
   stop.setOnClickListener(this);
   ff.setOnClickListener(this);
   seekbar.setOnSeekBarChangeListener(onseek); // 진행시간
   seekvol.setOnSeekBarChangeListener(voseek); // 볼륨조정
  } catch (Exception e) {
   e.printStackTrace();
  }
  mp.setOnCompletionListener(new OnCompletionListener(){

   @Override
   public void onCompletion(MediaPlayer mp) {
    play.setText("PLAY");
    seekbar.setProgress(0);
   }   
  });
    }

 @Override
 public void run() { //implements Runnable 로 부터 상속받았기에
  int current=0;
  while(mp!=null){
   try {
    Thread.sleep(1000);
    current=mp.getCurrentPosition();
    if(mp.isPlaying()){
     seekbar.setProgress(current);
     
    }
   } catch (Exception e) {
    e.printStackTrace();
   }
  }  
 }
 OnSeekBarChangeListener onseek=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);
       int m=progress/60000;
       int s=(progress%60000)/1000;
       t1.setText(m+":"+s);
  }
 };
 
 OnSeekBarChangeListener voseek=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) {
   audio.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);  
  }
 };
 @Override
 public void onClick(View v) { //implements OnClickListener로 부터 상속받았기에
  if(v.getId()==R.id.play){
   if(mp.isPlaying()){ // 음악이 플레이중이면
    mp.pause();
    play.setText("PLAY");
   }else{
    mp.start();
    play.setText("PAUSE");
   }
  }else if(v.getId()==R.id.stop){
         try {
    mp.stop();
    play.setText("PLAY");
    mp.prepare(); // 미디어 플레이어의 라이프싸이클에 나옴, 플레이하기전에는 준비시켜야함
       mp.seekTo(0);// 플레이어를 멈추면 seekTo : 위치를 맨앞으로 옮겨라
       seekbar.setProgress(0); // 프로그래스바 위치도 맨앞으로 옮김
         } catch (Exception e) {
    e.printStackTrace();
   }
  }else if(v.getId()==R.id.rw){
   int current=mp.getCurrentPosition(); // 현재위치
   if(current-20000<0){
    mp.seekTo(0);
   }else{
    mp.seekTo(current-20000);
   }
  }else if(v.getId()==R.id.ff){
   int current=mp.getCurrentPosition(); // 현재위치 가져오기
   int total=mp.getDuration();
   if(current+20000>total){
    mp.seekTo(total);
   }else{
    mp.seekTo(current+20000);// 현재위치에 +20초
   }
  }
 }

 @Override
 protected void onDestroy() { // Activity 가 끝날때 처리되는 메서드
        if(mp!=null){
         mp.release(); // 플레이어를 끝내라
        }
  super.onDestroy();
 }
}