Android实战 - 音心播放器 (MusciActivity-专辑图片获得,基本控制实现)
来源:互联网 发布:windows多线程编程视频 编辑:程序博客网 时间:2024/06/04 19:56
1.背景
上篇已经实现通过使用官方SDK进行基本数据请求再次封装的实现,这篇将实现对音乐的控制 播放、暂停、上一曲、下一曲的控制。
播放页面控制歌曲 - > 通知栏做出更改;通知栏控制歌曲-> 播放页面做出更改;
2.获得专辑图片思路总结
如果没有使用ShowApi上的接口就跳过这里吧;
(1)分析
在第一篇中我们已经知道歌曲列表中没有歌曲图片,但是提供的通过歌曲名或歌手名搜索歌曲接口,提供了歌手或者歌曲的图片,我们可以通过使用这个来进行使用获得当前播放歌曲的图片信息,从而给歌曲信息中加载出来。
(2)基本流程
(3)说明
通过上面的已经知道使用的是官方SDK提供的接口实现,基本步骤如上图所示,加载图片使用的是Volley网络请求框架,进行加载专辑图片。
Android-Volley网络通信框架(二次封装数据请求和图片请求(包括处理请求队列和图片缓存))
3.基本控制
(1)先来个基本的控制图解
从图上可以看出三个MusicNotification , MusicService , MusicActivity 三个过程,以MusicService为核心,MusicNotification和MusicActivity 相互控制实现;
如下图所示 (点击查看原图):
(2)MusicActivity 播放与暂停
基本过程:当点击播放的时候,发送广播到MusicService ,MusicSrvice接受广播取得参数,对其进行控 制, 1)播放当前音乐 ;2)更新通知栏;3)发送广播给MusicActivity,更新MusicActivity界面状态;
(3)Notification 控制播放 (实际上和上面一样)
基本过程:当点击播放的时候,发送广播到MusicService ,MusicSrvice接受广播取得参数,对其进行控 制, 1)播放当前音乐 ;2)更新通知栏;3)发送广播给MusicActivity,更新MusicActivity界面状态;
4.过程实现
过程 : MusicActivity 初始化操作 、基本播放,暂停,下一曲,上一曲控制操作,均一样;
(1)OnStart() 是发送广播给MusicService
@Overrideprotected void onStart() {initData();try {serviceIntent.putExtra(MUSIC_ACTIVITY_SERVICE_KEY, 40001);sendBroadcast(serviceIntent);} catch (Exception e) {showToast("new Intent 异常 : " + e.getMessage());}super.onStart();}
(2)MusicService 将 当前音乐数据信息,进度,发送给MusicActivity
/** * 来自 MusicActivity 的控制 * * @param musictype2 */private void musicActivityService(int musictype2) {//showToast("musicActivityService 执行了 musictype2 :" + musictype2);switch (musictype2) {case 40001:sendModelToMusicActivity();break;case 40002://播放与暂停playSong(); break;case 40003: //下一曲 nextSong();break;case 40004: //上一曲preSong();break;}}
/** * 发送Model给MusicActivity */private void sendModelToMusicActivity() {if (mm != null) {// 正在播放的歌曲实体if(mm.getSeconds()==0){mm.setSeconds(mp.getDuration()/1000);}mActivityIntent.putExtra(MUSIC_SERVICE_TOACTIVITY_CODE, 41002);mActivityIntent.putExtra(MUSIC_SERVICE_TO_ACTIVITY_ISPLAY,mp.isPlaying());mActivityIntent.putExtra(MUSIC_SERVICE_TO_ACTIVITY_NOWTIME,mp.getDuration() - mp.getCurrentPosition());mActivityIntent.putExtra(MUSIC_SERVICE_TO_ACTIVITY_MODEL,(Serializable) mm);} else {// 默认发送第一首歌信息mm = musics.get(0);mActivityIntent.putExtra(MUSIC_SERVICE_TOACTIVITY_CODE, 41001);mActivityIntent.putExtra(MUSIC_SERVICE_TO_ACTIVITY_ISPLAY,mp.isPlaying());mActivityIntent.putExtra(MUSIC_SERVICE_TO_ACTIVITY_MODEL,(Serializable) mm);}sendBroadcast(mActivityIntent);}
重点 :
在进行播放时,在MeidaPlayer中的OnPrepered()事件方法中进行发送 给MusicActivity 信息:
@Overridepublic void onPrepared(MediaPlayer mp) {// 准备加载的时候resume();sendModelToMusicActivity();}
@Overridepublic void onReceive(Context context, Intent intent) {code = intent.getIntExtra(MUSIC_SERVICE_TOACTIVITY_CODE, 0);if (code > 0) {// MusicService 来的控制musicServiceKong(code, intent);}Log.d("MaskMusic", "MusicActivity - code : " + code);// 隐藏进度条music_show_gone.setVisibility(View.GONE);}
5.总结
在实现中,最纠结的就是在播放的时候,通知栏进行控制的时候,无法发送当前歌曲信息给MusicActivity, 后在onPrepered() 方法中尝试后,十分方便的使用;
下篇,歌词实现,滚动歌词;
- Android实战 - 音心播放器 (MusciActivity-专辑图片获得,基本控制实现)
- Android实战 - 音心播放器 (通知实现音乐的播放/暂停/下一曲控制)
- Android开发本地及网络Mp3音乐播放器(五)实现专辑封面图片
- Android实战 - 音心播放器 (Music Service 实现)
- Android实战 - 音心播放器(MusicActivity - 歌词实现)
- android 音乐播放器----获取专辑封面图片
- android 音乐播放器----获取专辑封面图片
- Android应用--简、美音乐播放器获取专辑图片(自定义列表适配器)
- Music播放器中歌曲是如何获得专辑图片的
- Music播放器中歌曲是如何获得专辑图片的
- Android实战 - 音心播放器 (MusicActivity-音乐播放页面界面实现)
- android音乐播放器_专辑列表
- Android实战 - 音心播放器 (MusicActivity - 倒计时 ,进度条实现)
- Android实战 - 音心播放器 (MusicListActivity - 分类信息界面实现)
- Android实战 - 音心播放器 (优化Service退出,按两下退出应用实现)
- Android仿虾米音乐播放器之专辑图片模糊处理
- Android应用--简、美音乐播放器实现专辑倒影效果
- 音乐播放器之示波器和读取专辑图片
- JMeter监控tomcat7性能
- [POJ3080] Blue Jeans
- The operation couldn’t be completed. (LaunchServicesError error 0.)问题解决
- Eclipse通过日志消息过滤设置Logcat Message Filter Settings来过滤自己特定项目的日志
- android Tether 分析
- Android实战 - 音心播放器 (MusciActivity-专辑图片获得,基本控制实现)
- change default text editor to sublime text
- SpringMVC拦截器详解[附带源码分析]
- NSTimer控制进度条
- socket.io client api
- ORACLE CPU利用率高的解决方案
- 【js小方法】提交表单是,判断单选框是否被选中
- SQL判断某列中是否包含中文字符或者英文字符
- LeetCode Insertion Sort List