不推荐使用,可以加深知识理解
activity中 根据
Handler
接收结果
,
刷新
ui
private Handler handler = new Handler() {//接收结果,刷新ui
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case Constants.MSG_ONPREPARED:
int currentPosition = msg.arg1;
int totalDuration = msg.arg2;
mTv_curduration.setText(MediaUtils.duration2Str(currentPosition));
mTv_totalduration.setText(MediaUtils.duration2Str(totalDuration));
mSk_duration.setMax(totalDuration);
mSk_duration.setProgress(currentPosition);
// 歌词 .....
break;
case Constants.MSG_ONCOMPLETION:
//更加当前的播放model做对应的处理
if (MediaUtils.CURMODEL == Constants.MODEL_NORMAL) {//当前是顺序播放
if (MediaUtils.CURPOSITION < MediaUtils.songList.size() - 1) {
changeColorWhite();
MediaUtils.CURPOSITION++;//MediaUtils.CURPOSITION最大值就是MediaUtils.songList.size() - 1
changeColorGreen();
startMediaService("播放", MediaUtils.songList.get(MediaUtils.CURPOSITION).path);
} else {
startMediaService("停止");
}
} else if (MediaUtils.CURMODEL == Constants.MODEL_RANDOM) {//当前是随机播放
Random random = new Random();
int position = random.nextInt(MediaUtils.songList.size());
changeColorWhite();
MediaUtils.CURPOSITION = position;
changeColorGreen();
startMediaService("播放", MediaUtils.songList.get(MediaUtils.CURPOSITION).path);
} else if (MediaUtils.CURMODEL == Constants.MODEL_REPEAT) {//当前是重复播放
if (MediaUtils.CURPOSITION < MediaUtils.songList.size() - 1) {
changeColorWhite();
MediaUtils.CURPOSITION++;//MediaUtils.CURPOSITION最大值就是MediaUtils.songList.size() - 1
changeColorGreen();
} else {
changeColorWhite();
MediaUtils.CURPOSITION = 0;
changeColorGreen();
startMediaService("播放", MediaUtils.songList.get(MediaUtils.CURPOSITION).path);
}
} else if (MediaUtils.CURMODEL == Constants.MODEL_SINGLE) {//当前是单曲循环
startMediaService("播放", MediaUtils.songList.get(MediaUtils.CURPOSITION).path);
}
break;
default:
break; } };};
seekbar的拖拽中直接: startMediaService("进度", seekBar.getProgress());
点击事件中
//播放按钮,点击同一个按钮.有两个操作.需要定义一个变量进行控制
//启动服务.而且让服务播放音乐
if (MediaUtils.CURSTATE == Constants.STATE_STOP) {//默认是停止,点击就变播放
startMediaService("播放", MediaUtils.songList.get(MediaUtils.CURPOSITION).path);
}
startMediaService方法如下: 发送Messenger给service
public void startMediaService(String option, int progress) {
Intent service = new Intent(MainActivity.this, MusicService.class);
service.putExtra("messenger", new Messenger(handler));
service.putExtra("option", option);
// service.putExtra("path", path);
service.putExtra("progress", progress);
startService(service);
}
在service中发送message给activity的handle
@Override
public IBinder onBind(Intent intent) {
// TODO
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {//每次启动都会来到此方法
String option = intent.getStringExtra("option");
if (mMessenger == null) {
mMessenger = (Messenger) intent.getExtras().get("messenger");
}
if ("播放".equals(option)) {
String path = intent.getStringExtra("path");
play(path);
} else if ("进度".equals(option)) {
int progress = intent.getIntExtra("progress", -1);
seekPlay(progress);
}
return super.onStartCommand(intent, flags, startId);
}
/**---------------封装音乐播放常见的方法 end---------------**/
/**---------------相关的回调方法---------------**/
@Override
public void onCompletion(MediaPlayer mp) {
try {
//service发送消息.告诉activity,当前的歌曲播放完了
Message msg = Message.obtain();
msg.what = Constants.MSG_ONCOMPLETION;
//发送消息
mMessenger.send(msg);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onPrepared(MediaPlayer mp) {
if (mTimer == null) {
mTimer = new Timer();
}
mTimer.schedule(new TimerTask() {
@Override
public void run() {
try {
//1.准备好的时候.告诉activity,当前歌曲的总时长
int currentPosition = mPlayer.getCurrentPosition();
int totalDuration = mPlayer.getDuration();
Message msg = Message.obtain();
msg.what = Constants.MSG_ONPREPARED;
msg.arg1 = currentPosition;
msg.arg2 = totalDuration;
//发送消息
mMessenger.send(msg);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}, 0, 1000);
}