我的音乐播放器 服务控制音乐的状态
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的音乐播放器 服务控制音乐的状态相关的知识,希望对你有一定的参考价值。
package com.jk.impl; import android.widget.SeekBar; public interface IMusic { //暂停播放 public void dopause(); //继续播放 public void doresume(); //播放 public void dostart(); //停止播放 public void dostop();
//初始化SeekBar 和设置播放完成的回调方法 public void init(SeekBar seekbar,onMusicOver over); //释放资源
public void doRset(); //将进度条更新线程移除队列
public void dorevmo(); }
音乐播放器中最重要的部分: 服务, 控制音乐播放器的部分是通过调用MediaPlayer,
一个音乐播放的回调方法:用来通知播放完成,进行下一步:
public interface onMusicOver { public void onMusicOver(); }
一个音乐播放的接口,定义音乐播放的各种状态:
更新seekbar是一个耗时的操作,在init() 中使用一个线程将
更新播放进度。
设置seekBar的监听事件来检测进度条的拖动来改变播放的时间,在
onProgressChanged()更新音乐的播放时间mediaPlayer.seekTo()
播放:
MediaPlayer.reset(); //重置资源
MediaPlayer.setDataSource(path);//加载路径
MediaPlayer.prepare() //准备,加载资源
seekbar.setOnSeekBarChangeListener(xx)设置进度条的监听,
MediaPlayer.start(); //播放
将进度线程绑定到值顶的handler,为了方便改变播放时,剔除上一个进度线程。
设置一个播放完成事件的监听,
mp.setOnCompletionListener(xx){
调用播放完成的回调方法,为了方便通知用户播放完,进行下一步操作。
over.onMusicOver();
};
package com.jk.service; import android.app.Service; import android.content.Intent; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.os.Binder; import android.os.Handler; import android.os.IBinder; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import com.jk.impl.IMusic; import com.jk.impl.onMusicOver; public class musicService extends Service { private MediaPlayer mp; private String path; private boolean f = false; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub System.out.println("onBind"); path = intent.getStringExtra("path"); System.out.println(path); return new MyBinder(); } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); System.out.println("onCreate"); // 播放音乐 try { // 得到媒体播放器 mp = new MediaPlayer(); // mp.pause(); // mp.start(); } catch (Exception e) { e.printStackTrace(); } } @Override public void onStart(Intent intent, int startId) { // TODO Auto-generated method stub super.onStart(intent, startId); System.out.println("onStart"); } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); System.out.println("onDestroy"); } @Override public boolean onUnbind(Intent intent) { // TODO Auto-generated method stub System.out.println("onUnbind"); return super.onUnbind(intent); } // 暂停 public void pause() { mp.pause(); } // 继续 public void resume() { mp.start(); } class MyBinder extends Binder implements IMusic { // MyService getService(){ // return MyService.this; // } private SeekBar seekbar; Handler handle = new Handler() { }; Runnable runnable = new Runnable() { @Override public void run() { // 根新进度条 if (mp.isPlaying()) { seekbar.setProgress(mp.getCurrentPosition()); } handle.postDelayed(runnable, 500); } }; public void dopause() { // 调用的本地MyService的暂停 f=false; pause(); } public void doresume() { resume(); } public void dorevmo(){ handle.removeCallbacks(runnable); } public void init(SeekBar seekbar,final onMusicOver over) { System.out.println("*********init******"); this.seekbar = seekbar; // 重置 mp.reset(); // 设置播放资源 try { mp.setDataSource(path); mp.prepare(); seekbar.setMax(mp.getDuration()); //设置拖动进度条改变的时候的监听方法 seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Override public void onStopTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } @Override public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // fromUser 是否是用户操作 if(fromUser){ mp.seekTo(progress); } } }); // 设置进度 mp.start(); f=true; handle.post(runnable); mp.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { // TODO Auto-generated method stub over.onMusicOver(); } }); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void dostart() { try { mp.start(); } catch (Exception e) { e.printStackTrace(); } } public void dostop() { // TODO Auto-generated method stub if (mp != null && mp.isPlaying()) { mp.stop(); mp.release(); mp = null; } } public void doRset() { mp.release(); } } }
以上是关于我的音乐播放器 服务控制音乐的状态的主要内容,如果未能解决你的问题,请参考以下文章