package com.example.day17_medaiplayer;
public class MainActivity extends Activity implements OnClickListener,
OnSeekBarChangeListener {
// get External Storage Directory() 获取sdcard的目录
// getAbsolutePath 获取文件路径
private String path = Environment.getExternalStorageDirectory()
.getAbsolutePath();
private String[] music_names = new String[] { path + "/music1.mp3",
path + "/music2.mp3", path + "/music3.mp3" };
private TextView tilte;
private SeekBar seek;
private MediaPlayer player;
private int index = 0;// 数组下标
private MyHandler myHandler = new MyHandler();
private boolean isPlaying = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//
initViews();
player = new MediaPlayer();
}
private void initViews() {
tilte = (TextView) findViewById(R.id.name);
seek = (SeekBar) findViewById(R.id.progress);
Button pre = (Button) findViewById(R.id.pre);
Button start = (Button) findViewById(R.id.start);
Button next = (Button) findViewById(R.id.next);
pre.setOnClickListener(this);
start.setOnClickListener(this);
next.setOnClickListener(this);
// 拖动进度,音乐在拖到的位置开始播放
seek.setOnSeekBarChangeListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.pre://
if (index > 0) {
index--;
try {
// reset
player.reset();
// 设置资源
player.setDataSource(music_names[index]);
// 准备
player.prepare();
// 可以获取到音乐的大小
int duration = player.getDuration();
// 设置给进度条
seek.setMax(duration);
player.start();
// 发送消息
myHandler.sendEmptyMessageDelayed(0, 1000);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
Toast.makeText(MainActivity.this, "sorry 到顶了", 0).show();
}
break;
case R.id.start:// 播放
if (isPlaying) {
player.pause();
isPlaying = false;
return;
}
try {
// reset
player.reset();
// 设置资源
player.setDataSource(music_names[index]);
// 准备
player.prepare();
// 可以获取到音乐的大小
int duration = player.getDuration();
// 设置给进度条
seek.setMax(duration);
player.start();
isPlaying = true;
// 发送消息
myHandler.sendEmptyMessageDelayed(0, 1000);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case R.id.next:
if (index < music_names.length - 1) {
index++;
try {
// reset
player.reset();
// 设置资源
player.setDataSource(music_names[index]);
// 准备
player.prepare();
// 可以获取到音乐的大小
int duration = player.getDuration();
// 设置给进度条
seek.setMax(duration);
player.start();
// 发送消息
myHandler.sendEmptyMessageDelayed(0, 1000);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
Toast.makeText(MainActivity.this, "sorry 没了", 0).show();
}
break;
default:
break;
}
}
// handler
class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
// 获取当期播放进度
int position = player.getCurrentPosition();
// 赋值给进度条
seek.setProgress(position);
// 继续发送
// 判断,如果当前进度和歌曲的总长度相等,就停止发送消息
if (position >= player.getDuration()) {
myHandler.removeCallbacksAndMessages(null);
} else {
myHandler.sendEmptyMessageDelayed(0, 1000);
}
}
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
/**
* 1获取进度条的当前进度 2.将进度给player
*/
int progress = seekBar.getProgress();
player.seekTo(progress);
}
}