package org.kymjs.music.service;
import java.util.List;
import org.kymjs.kjframe.ui.ViewInject;
import org.kymjs.kjframe.utils.KJLoger;
import org.kymjs.music.Config;
import org.kymjs.music.bean.Music;
import org.kymjs.music.utils.ListData;
import org.kymjs.music.utils.Player;
import android.app.Notification;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Binder;
import android.os.IBinder;
import android.telephony.TelephonyManager;
/**
* 音乐播放的后台服务
*
* @author kymjs
*
*/
public class PlayerService extends Service {
private final Player mPlayer = Player.getPlayer();
private final LocalPlayer localPlayer = new LocalPlayer();
private SystemReceiver mReceiver;
public class LocalPlayer extends Binder {
public PlayerService getService() {
return PlayerService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
IntentFilter intentFilter = new IntentFilter();
mReceiver = new SystemReceiver();
intentFilter.addAction(Intent.ACTION_NEW_OUTGOING_CALL);
intentFilter.addAction("android.intent.action.PHONE_STATE");
registerReceiver(mReceiver, intentFilter);
return localPlayer;
}
@Override
public void onCreate() {
super.onCreate();
startForeground(1, new Notification());
}
@Override
public void onDestroy() {
super.onDestroy();
mPlayer.destroy();
unregisterReceiver(mReceiver);
stopForeground(true);
}
/**
* 播放
*
* @param list
* @param position
* @return
*/
public Music play(List<Music> list, int position) {
Music music = null;
if (list == null || list.isEmpty()) {
play();
} else {
music = mPlayer.play(this, list, position);
}
return music;
}
/**
* 默认播放
*
* @return
*/
public Music play() {
Music music = null;
if (ListData.getLocalList(this) == null
|| ListData.getLocalList(this).isEmpty()) {
ViewInject.toast("亲,还没有歌呢,去扫描一下吧");
} else {
music = mPlayer.play(this, ListData.getLocalList(this), 0);
}
return music;
}
/**
* 暂停
*/
public void pause() {
mPlayer.pause();
}
/**
* 正在暂停,调用后开始继续播放
*/
public void replay() {
mPlayer.replay();
}
/**
* 下一首
*
* @return
*/
public Music next() {
Music music = null;
if (mPlayer.getPlaying() == Config.PLAYING_STOP
|| mPlayer.getList().isEmpty()) {
play();
} else {
music = mPlayer.next(this);
KJLoger.debug("正在播放:" + music.getTitle());
}
return music;
}
/**
* 上一首
*
* @return
*/
public Music previous() {
Music music = null;
if (mPlayer.getPlaying() == Config.PLAYING_STOP
|| mPlayer.getList().isEmpty()) {
play();
} else {
music = mPlayer.previous(this);
KJLoger.debug("正在播放:" + music.getTitle());
}
return music;
}
/**
* 打电话时暂停播放
*
* @author kymjs
*
*/
public class SystemReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 如果是打电话
if (Intent.ACTION_NEW_OUTGOING_CALL.equals(intent.getAction())) {
pause();
} else {
// 如果是来电
TelephonyManager tm = (TelephonyManager) context
.getSystemService(Service.TELEPHONY_SERVICE);
switch (tm.getCallState()) {
// 响铃
case TelephonyManager.CALL_STATE_RINGING:
pause();
break;
// 摘机
case TelephonyManager.CALL_STATE_OFFHOOK:
pause();
break;
// 空闲
case TelephonyManager.CALL_STATE_IDLE:
replay();
break;
}
}
}
}
}