Android(安卓)Service播放音乐
16lz
2021-01-26
<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; } } }}
更多相关文章
- 使用bindService方式启动Service
- Android(安卓)即时音效SoundPool
- 播放记录的SQLite数据库实现
- Android_播放器的进度条
- android使用opengl es2.0播放视频
- Android(安卓)Media Recorder录音播放源代码
- ObjectAnimators 动画的暂停与重新开始
- Android音乐播放器【支持:速率调节,音调调节,采样率调节】
- Android(安卓)编程案例-本地音乐播放器源码及使用注意事项