android 音乐播放 启动方式 (1)利用内部类绑定service传送数据,只适用于单activity
来源:互联网 发布:asp.net mvc5 web编程 编辑:程序博客网 时间:2024/06/03 18:39
项目添加音乐播放模块,找了几个别人写的,来学习总结一下,最后发现真的挺简单的
https://github.com/DoYouLove/MVPlayer 项目地址
利用ServiceConnection来把service绑定到当前activity,简单快捷,易于操作,但是限制是只能在本页面进行操作
在service中
如果是继续播放发送广播
Intent intent = new Intent(ACTION_START_PLAY);intent.putExtra(Constant.Extra.AUDIO_POSITION, mPosition);sendBroadcast(intent);
定时把数据传入 mAudioPlayerProxy中,
public class AudioPlayerProxy extends Binder {...} private AudioPlayerProxy mAudioPlayerProxy;@Nullable@Overridepublic IBinder onBind(Intent intent) { return mAudioPlayerProxy;}@Overridepublic void onCreate() { super.onCreate(); mAudioPlayerProxy = new AudioPlayerProxy();}
在activity中 有意思的是,如下图
private void startService() { Intent intent = new Intent(getIntent()); intent.setClass(this, MusicPlayerService.class); startService(intent);}private void registerBroadcast() { IntentFilter intentFilter = new IntentFilter(); //监听开始播放的ACTION intentFilter.addAction(MusicPlayerService.ACTION_START_PLAY); registerReceiver(mUpdateReceiver, intentFilter);}private BroadcastReceiver mUpdateReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(MusicPlayerService.ACTION_START_PLAY)) { int pos = intent.getIntExtra(Constant.Extra.AUDIO_POSITION, -1); updateStartPlay(pos); } }};
更新进度和歌词是把handle放在activity中,不停地访问service中mAudioPlayerProxy得数据来设定自己或者使用其中的方法来设置mMediaPlayer.
private void startUpdateLyric() { mHandler.postDelayed(new Runnable() { @Override public void run() { if (mAudioPlayerProxy != null) { mLyricView.roll(mAudioPlayerProxy.getProgress(), mAudioPlayerProxy.getDuration()); startUpdateLyric(); } } }, UPDATE_LYRIC_INTERVAL);}private void startUpdateProgress() { if (mAudioPlayerProxy != null) { int progress = mAudioPlayerProxy.getProgress(); int duration = mAudioPlayerProxy.getDuration(); if (progress > duration) { progress = duration; } String time = StringUtils.formatDuration(progress) + "/" + StringUtils.formatDuration(duration); mTime.setText(time); mSeekBar.setProgress(mAudioPlayerProxy.getProgress()); } mHandler.postDelayed(new Runnable() { @Override public void run() { startUpdateProgress(); } }, DEFAULT_DELAY);}private ServiceConnection mServiceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mAudioPlayerProxy = (MusicPlayerService.AudioPlayerProxy) service; } @Override public void onServiceDisconnected(ComponentName name) { mAudioPlayerProxy = null; }};@Overrideprotected void onResume() { super.onResume(); Intent intent = new Intent(this, MusicPlayerService.class); bindService(intent, mServiceConnection, BIND_AUTO_CREATE);}@Overrideprotected void onPause() { super.onPause(); unbindService(mServiceConnection); stopUpdateProgress();}@Overrideprotected void onDestroy() { super.onDestroy(); unregisterReceiver(mUpdateReceiver);}
阅读全文
0 0
- android 音乐播放 启动方式 (1)利用内部类绑定service传送数据,只适用于单activity
- Android—在Activity中绑定service播放音乐
- 音乐播放 启动方式 (2) service发送msg给activity
- android 利用service来播放音乐
- android 利用 service 实现音乐播放
- 用static关键字修饰类(只适用于内部类)
- Android启动服务播放音乐(两种启动方式)
- Android实现后台播放音乐(Service方式)
- android 音乐播放 启动方式 (3)服务通过发送广播来控制activity显示进度等
- android Service(一) activity启动Service方式一:startService()
- android Service(二) activity启动Service方式二:bindService()
- android 音乐播放service
- Android Service播放音乐
- Android-Service (基本知识,生命周期,实例-startService 启动的服务音乐播放器后台服务播放)
- Android-Service (基本知识,生命周期,实例-startService 启动的服务音乐播放器后台服务播放)
- java 多线程 数据流 内部类(播放音乐)
- 【Android 基础】MediaPlayer(1) 与Service 混合播放音乐
- Service后台播放音乐(文件方式,raw资源方式)
- .Net MVC断点进不去
- SVN创建分支/合并分支/切换分支
- Chrome插件推荐
- ios-instancetype和id的区别
- ios之nil、NULL、NSNULL/Nil的区别
- android 音乐播放 启动方式 (1)利用内部类绑定service传送数据,只适用于单activity
- Android GSON详解(一)
- 图片上传预览原理及实现
- 《C语言程序设计教程》(主编黄迪明、余勤)第四章课后习题答案
- Android PickerView 选择器的简单使用
- 正则表达式之Python篇
- Vue-cli+webpack单页模式详解
- Qt::/usr/bin/ld: 找不到 -lGL
- Java注解(@Interface)详解