<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;            }        }    }}

  

更多相关文章

  1. 使用bindService方式启动Service
  2. Android(安卓)即时音效SoundPool
  3. 播放记录的SQLite数据库实现
  4. Android_播放器的进度条
  5. android使用opengl es2.0播放视频
  6. Android(安卓)Media Recorder录音播放源代码
  7. ObjectAnimators 动画的暂停与重新开始
  8. Android音乐播放器【支持:速率调节,音调调节,采样率调节】
  9. Android(安卓)编程案例-本地音乐播放器源码及使用注意事项

随机推荐

  1. html 引用文件编码为utf-8 的 js文件乱码
  2. 对于MVC中的循环不适用于不同的MapRoute
  3. 当给出%宽度时,表的主体减少了Head的col 1
  4. 关于清除浮动的问题。一招解决
  5. html 加上readonly后在各种浏览器的差异
  6. jQuery onclick不工作在移动设备上
  7. PHP课程总结20161221
  8. 小程序:Java下载单页HTML(可下载引用资源)
  9. escapeXml过滤掉特殊字符
  10. 段落包括通过过渡带来的div