音樂播放與進度拖拽原理
阿新 • • 發佈:2019-02-11
public class MainActivity extends Activity {
private MediaPlayer player;
private SeekBar sb;
private Timer timer;
private TimerTask task;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sb = (SeekBar) findViewById(R.id.sb);
timer = new Timer();
task = new TimerTask() {
public void run() {
if(player!=null&&player.isPlaying()){
//進度條當前位置為音樂的播放位置
int CurrentPosition = player.getCurrentPosition();
//進度條的最大值為音樂的總長度
int max = player.getDuration();
sb.setMax(max);
sb.setProgress(CurrentPosition);
}
}
};
//設定播放時進度條seekbar跟著移動
timer.schedule(task, 500,500);
//設定拖拽進度條時,播放音樂改變
sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
if( player!=null ){
int currentPosition = seekBar.getProgress();
player.seekTo(currentPosition);
}
}
public void onStartTrackingTouch(SeekBar seekBar) {
}
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
}
});
}
public void play(View view){
try {
if(player==null){
player = new MediaPlayer();
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setDataSource("/mnt/sdcard/a.mp3");
player.prepare();
player.start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void pause(View view){
if(player!=null&&player.isPlaying()){
player.pause();
}
}
public void resume(View view){
if(player!=null){
player.start();
}
}
public void restart(View view){
try {
if(player!=null&&player.isPlaying()){
player.reset();
player.setDataSource("/mnt/sdcard/a.mp3");
player.prepare();
player.start();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void stop(View view){
if(player!=null&&player.isPlaying()){
player.stop();
player=null;
}
}
@Override
protected void onDestroy() {
if(timer != null && task != null){
timer.cancel();
timer = null;
task.cancel();
task = null;
}
if(player!=null&&player.isPlaying()){
player.stop();
player=null;
}
super.onDestroy();
}
}