<pre name="code" class="java">/**
* 音乐播放服务
* Created by Lezg on 2014/6/7.
*/
public class PlayerService extends Service {
private final int UPDATA_CURRENT_TIME = 1;
private AppContext appContext;
private MyReceiver myReceiver;
private int curPosition = 0; //记录当前正在播放的音乐
private int currentTime; //当前播放进度
private int playMode = 0;
private boolean isPause;// 暂停状态
private String path;
private MediaPlayer mediaPlayer;
/**
* handler用来接收消息,发送广播更新歌曲已播放时间
*/
private final Handler myHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == UPDATA_CURRENT_TIME) {
if (mediaPlayer != null) {
currentTime = mediaPlayer.getCurrentPosition();//当前歌曲播放时长
AppHelper.sendBoastCast_curTime(PlayerService.this, currentTime);
myHandler.sendEmptyMessageDelayed(1, 1000);
}
}
}
};
@Override
public void onCreate() {
super.onCreate();
appContext = AppContext.getInstance();
initRegisterReceiver();
initMedia();
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onDestroy() {
unregisterReceiver(myReceiver);
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
super.onDestroy();
}
/**
* 媒体播放器初始化
*/
void initMedia() {
mediaPlayer = new MediaPlayer();
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
switch (playMode) {
case AppHelper.MODE_SEQUENCE:
++curPosition;
if (curPosition > appContext.mp3Infos.size() - 1) {
curPosition = 0;
mediaPlayer.stop();
return;
}
AppHelper.sendBoastCast_curPosition(PlayerService.this, curPosition);
path = appContext.mp3Infos.get(curPosition).getUrl();
playMusic(0);
break;
case AppHelper.MODE_SHUFFLE:
curPosition = AppHelper.getRandomIndex(appContext.mp3Infos.size() - 1);
path = appContext.mp3Infos.get(curPosition).getUrl();
AppHelper.sendBoastCast_curPosition(PlayerService.this, curPosition);
playMusic(0);
break;
case AppHelper.MODE_REPEAT:
++curPosition;
if (curPosition > appContext.mp3Infos.size() - 1) {
curPosition = 0;
}
AppHelper.sendBoastCast_curPosition(PlayerService.this, curPosition);
path = appContext.mp3Infos.get(curPosition).getUrl();
playMusic(0);
break;
case AppHelper.MODE_REPEATONE:
mediaPlayer.start();
break;
default:
break;
}
}
});
}
/**
* 注册广播
*/
void initRegisterReceiver() {
myReceiver = new MyReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(AppHelper.MUSIC_SERVICE);
registerReceiver(myReceiver, filter);
}
/**
* 播放音乐
*
* @param currentTime 当前播放进度
*/
void playMusic(int currentTime) {
try {
mediaPlayer.reset();
mediaPlayer.setDataSource(path);
mediaPlayer.prepare();
mediaPlayer.setOnPreparedListener(new PreParedListner(currentTime));
myHandler.sendEmptyMessage(UPDATA_CURRENT_TIME);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 暂停播放
*/
void pausePlaying() {
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
mediaPlayer.pause();
isPause = true;
}
}
/**
* 暂停后继续播放
*/
void rePlayMusic() {
if (isPause) {
mediaPlayer.start();
isPause = false;
}
}
/**
* 实现一个OnPrepareLister接口,当音乐准备好的时候开始播放
*/
private final class PreParedListner implements OnPreparedListener {
private final int currentTime;
public PreParedListner(int currentTime) {
this.currentTime = currentTime;
}
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();
if (currentTime > 0) { // 如果音乐不是从头播放
mediaPlayer.seekTo(currentTime);
}
int duration = mediaPlayer.getDuration();
AppHelper.sendBoastCast_duration(PlayerService.this, duration);
}
}
/**
* 接收MianActivity 传来的播放模式
*/
private class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
int mode = intent.getIntExtra("playMode", 0);
switch (mode) {
case AppHelper.MODE_SEQUENCE:
playMode = AppHelper.MODE_SEQUENCE;
break;
case AppHelper.MODE_SHUFFLE:
playMode = AppHelper.MODE_SEQUENCE;
break;
case AppHelper.MODE_REPEAT:
playMode = AppHelper.MODE_REPEAT;
break;
case AppHelper.MODE_REPEATONE:
playMode = AppHelper.MODE_REPEATONE;
break;
case AppHelper.MODE_PLAY:
path = intent.getStringExtra("url");
curPosition = intent.getIntExtra("curPosition", 0);
playMusic(0);
break;
case AppHelper.MODE_PAUSE:
pausePlaying();
break;
case AppHelper.MODE_CONTINUE:
rePlayMusic();
break;
case AppHelper.MODE_PRE:
path = intent.getStringExtra("url");
curPosition = intent.getIntExtra("curPosition", 0);
playMusic(0);
break;
case AppHelper.MODE_NEXT:
path = intent.getStringExtra("url");
curPosition = intent.getIntExtra("curPosition", 0);
playMusic(0);
break;
case AppHelper.MODE_PROGRESS_CHANGE:
currentTime = intent.getIntExtra("progress", 0);
playMusic(currentTime);
break;
default:
break;
}
}
}
}
Android Service播放音乐
最新推荐文章于 2022-11-14 22:16:25 发布