音乐播放类,同时控制进度条拖拽更改音乐进度以及获得音乐总时间和当前时间
public class MainActivity extends Activity {
protected static final String TAG = "MainActivity-->";
private MediaPlayer mediaPlayer;
private SeekBar seekBar;
private Timer timer;
private int duration;
private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
int progress = (Integer) msg.obj;
//设置进度
seekBar.setProgress(progress);
tvTime.setText("当前时间 : "+TimerFormatter.
formatterTime(mediaPlayer.getCurrentPosition())+"\n总时长 : "+
TimerFormatter.formatterTime(mediaPlayer.getDuration()));
};
};
private TextView tvTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
timer = new Timer();
seekBar = (SeekBar) findViewById(R.id.seekBar);
tvTime = (TextView) findViewById(R.id.tvTime);
//设置seekbar进度改变的一个监听
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
//手指停止拖拽时会执行该方法
Log.d(TAG, "onStopTrackingTouch");
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
//手指开始拖拽时会执行的方法
Log.d(TAG, "onStartTrackingTouch");
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
//参数 : fromUser 是用来标识是否来自用户的手动操作 true 用户动过手动方式更改的进度条
//false 反之亦然
//进度条更改时会执行的方法
Log.d(TAG, "onProgressChanged");
if(fromUser){
int currentPositon = (progress * duration) / 100;
//跳转到你所指定的位置进行播放
mediaPlayer.seekTo(currentPositon);
}
}
});
}
/**
* 播放
* @param v
*/
public void btnPlay(View v){
try {
mediaPlayer = new MediaPlayer();
//设置播放的流媒体类型 mp3 mp4 视频
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
//设置播放音乐文件的路劲
mediaPlayer.setDataSource("/sdcard/herofordawn.mp3");
//准备 就是执行音乐播放相关初始化工作
mediaPlayer.prepare();
mediaPlayer.start();
duration = mediaPlayer.getDuration();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
//每次都要去获取当前音乐的播放位置
int currentP = mediaPlayer.getCurrentPosition();
int progress = (currentP * 100)/ duration ; // 100 / 1000 //0.1% * 100
//发送消息
Message msg = handler.obtainMessage();
msg.obj = progress;
msg.what = 1;
handler.sendMessage(msg);
//System.out.println("当前时间 : "+currentP+" 总时长 : "+duration+" 计算后的值 : "+progress);
}
}, 0, 1000);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 暂停
* @param v
*/
public void btnPause(View v){
//
/isPlaying 判断音乐是否正在播放
if(mediaPlayer != null && mediaPlayer.isPlaying()){
//记住播放的位置
mediaPlayer.pause();
}else{
//跳转到播放的位置
mediaPlayer.start();
}
}
/**
* 停止
* @param v
*/
public void btnStop(View v){
if(mediaPlayer != null && mediaPlayer.isPlaying()){
mediaPlayer.stop();
mediaPlayer.release();//释放媒体资源
mediaPlayer = null;
}
}
}
时间转换类,将得到的音乐时间毫秒转换为时分秒格式
public class TimerFormatter {
public static String formatterTime(int currentPosition) {
SimpleDateFormat sdateformat=new SimpleDateFormat("mm:ss");
String format = sdateformat.format(new Date(currentPosition + 0));
return format;
}
}