android 控制音乐,Android在Service里播放与控制音乐

设计如下:

de19ba5cefffd48764ea79d85665f195.png

Service的代码如下,通过Binder去控制播放。监听来电没写,在Service里监听就行了。

public class MediaService extends Service {

static final int PLAY_LIST[] = {

R.raw.bigben

};

private MediaPlayer mediaPlayer;

private HashSet listeners;

private MediaBinder mBinder;

@Override

public void onCreate() {

super.onCreate();

listeners = new HashSet();

mBinder = new MediaBinder();

}

@Override

public void onDestroy() {

super.onDestroy();

listeners.clear();

try {

mediaPlayer.stop();

} catch(Exception e) {

e.printStackTrace();

}

}

@Override

public IBinder onBind(Intent intent) {

return mBinder;

}

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

if(intent != null && intent.getAction() != null) {

Intent i = new Intent(intent.getAction());

sendBroadcast(i);

}

return super.onStartCommand(intent, flags, startId);

}

private void notifyAllPlay() {

Iterator iterator = listeners.iterator();

while(iterator.hasNext()) {

iterator.next().onMediaPlay();

}

}

private void notifyAllPause() {

Iterator iterator = listeners.iterator();

while(iterator.hasNext()) {

iterator.next().onMediaPause();

}

}

private void notifyAllStop() {

Iterator iterator = listeners.iterator();

while(iterator.hasNext()) {

iterator.next().onMediaStop();

}

}

private void notifyAllCompletion() {

Iterator iterator = listeners.iterator();

while(iterator.hasNext()) {

iterator.next().onMediaCompletion();

}

}

MediaPlayer.OnCompletionListener mOnCompletionListener = new MediaPlayer.OnCompletionListener() {

@Override

public void onCompletion(MediaPlayer mp) {

notifyAllCompletion();

}

};

public class MediaBinder extends Binder {

public void addOnMediaChangeListener(OnMediaChangeListener listener) {

if(listener != null) {

listeners.add(listener);

}

}

public void removeOnMediaChangeListener (OnMediaChangeListener listener) {

if(listener != null) {

listeners.remove(listener);

}

}

public void play() {

if(mediaPlayer == null) {

mediaPlayer = MediaPlayer.create(MediaService.this, PLAY_LIST[0]);

mediaPlayer.setOnCompletionListener(mOnCompletionListener);

}

mediaPlayer.start();

notifyAllPlay();

}

public void pause() {

if(mediaPlayer != null) {

mediaPlayer.pause();

}

notifyAllPause();

}

public void stop() {

if(mediaPlayer != null) {

mediaPlayer.stop();

mediaPlayer = null;

}

notifyAllStop();

}

public boolean isPlaying() {

if(mediaPlayer != null) {

return mediaPlayer.isPlaying();

}

return false;

}

public int getDuration() {

if(mediaPlayer != null) {

return mediaPlayer.getDuration();

}

return -1;

}

public int getCurrentPosition() {

if(mediaPlayer != null) {

return mediaPlayer.getCurrentPosition();

}

return -1;

}

public void seek(int sec) {

if(mediaPlayer != null) {

try {

mediaPlayer.seekTo(sec);

} catch(Exception e) {

e.printStackTrace();

}

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值