您的位置:首页 > 其它

文章标题

2016-11-14 09:08 295 查看
package com.example.day_mediaplayer;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Timer;

import java.util.TimerTask;

import android.app.Activity;

import android.media.MediaPlayer;

import android.media.MediaPlayer.OnCompletionListener;

import android.media.MediaPlayer.OnPreparedListener;

import android.os.Bundle;

import android.view.View;

import android.widget.SeekBar;

import android.widget.SeekBar.OnSeekBarChangeListener;

import android.widget.TextView;

import android.widget.Toast;

public class MainActivity extends Activity {

private MediaPlayer player;
private SeekBar seekBar;
private Timer timer;
// 记录当前播放的是哪一首歌曲
int index;

int[] music_id = new int[] { R.raw.bag, R.raw.cl, R.raw.qq, };
//歌曲当前进度
private TextView textView_progress;
//歌曲总时长
private TextView textView_total;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

textView_progress = (TextView) findViewById(R.id.textView_progress);
textView_total = (TextView) findViewById(R.id.textView_total);
seekBar = (SeekBar) findViewById(R.id.seekBar);
// seekbar改变监听
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

@Override
// seekbar停止触摸
public void onStopTrackingTouch(SeekBar seekBar) {
// 得到seekbar停止时的进度
int progress = seekBar.getProgress();
// 把停止进度赋值给音频的当前进度
player.seekTo(progress);
// 当用户手指离开到seekbar的时候,就认为用户要手动改变音频进度的操作结束,再继续开启timer计时器,由歌曲的进度控制seekbar
musicCurrent();
}

@Override
// seekbar开始触摸
public void onStartTrackingTouch(SeekBar seekBar) {
// 当用户手指触摸到seekbar的时候,就认为用户要手动改变音频的进度,停止timer计时器
timer.cancel();
}

@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {

}
});


// player = MediaPlayer.create(this, R.raw.bag);

}

// 开始
public void start(View v) {
// 默认播放第一首
start_music(music_id[0]);
index = 0;

}

// 暂停
public void pause(View v) {

if (player != null && player.isPlaying()) {
player.pause();
}
}

// 停止
public void stop(View v) {

stop_music();

}

// 下一首,就是当前歌曲下标+1
public void next(View v) {

index=index+1;

if (index < music_id.length) {
stop_music();
start_music(music_id[index]);

} else {
Toast.makeText(this, "  没有更多音乐了 ", 0).show();
}

}

// 播放音乐的公共方法
private void start_music(int id) {

if (player == null) {
player = MediaPlayer.create(this, id);
}
//播放完成的监听
player.setOnCompletionListener(new OnCompletionListener() {

@Override
public void onCompletion(MediaPlayer mp) {
next(null);
}
});

// 得到歌曲的时长
int duration = player.getDuration();
//格式化毫秒值
String formatDate = formatDate(duration);
//设置歌曲总时长
textView_total.setText(formatDate);
// 设置seekBar最大值,就是歌曲的总时长
seekBar.setMax(duration);
player.setOnPreparedListener(new OnPreparedListener() {

@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.start();

}
});
// 获取歌曲实时进度,并设置个seekbar当前进度
musicCurrent();
}


/**

* 格式化毫秒值

* @param duration

* @return

*/

private String formatDate(int duration) {

SimpleDateFormat format =new SimpleDateFormat(“mm:ss”);

Date date=new Date(duration);

String str_format = format.format(date);
return str_format;


// Log.i(“TAG”, str_format);

}

// 停止音乐的公共方法
private void stop_music() {
if(timer!=null){
timer.cancel();
}
if (player != null) {
player.stop();
// 回收资源
player.release();
player = null;
}
}
/**
* //获取歌曲实时进度,并设置个seekbar当前进度
*/
public void musicCurrent() {

timer = new Timer();

timer.schedule(new TimerTask() {

@Override
public void run() {
if (player != null) {
// 得到当前歌曲的实时进度
final int currentPosition = player.getCurrentPosition();
seekBar.setProgress(currentPosition);
//更新歌曲的实时进度
runOnUiThread(new Runnable() {

@Override
public void run() {

textView_progress.setText(formatDate(currentPosition));
}
});
}
}
}, 0, 500);

}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mediaplayer