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();
}
}