不说其他先爆照
Ok现在该说正事了。写这个不为别的。只因为我发现网上竟然没有什么文章--.没办法。自己研究了。虽然现在第三库挺多。但是有些基础还是要明白 。首先需要介绍下几个需要使用到的类的作用。
PlaybackStateCompat 用来传递当前播放的状态
MediaMetadataCompat 用来存放音乐各种信息
MediaSessionCompat 用来连接上面两个之间的联系
MediaControllerCompat 控制音乐播放Play Pause....
以上解释最好还是看下官方文档。语文老师屎的早语言组织尽量精简。附上 上面那张截图的视频(带中文翻译)
http://v.youku.com/v_show/id_XMTY2NjY0ODQ4NA==.html?f=27790253&from=y1.2-3.4.4
好了开始撸起来吧
Step1建立MusicService
Step2初始化各种服务
Step3设置MediaSession回调
上面各种方法注释已经写的很清楚了。简书写代码和文字混排太难看了。还是写程序里的好
Step4设置MediaPlayer的播放回调
这里设置两个回调一个是播放准备。当播放器准备好后回会调
另一个是缓冲更新时的回调(更新seekBar)
Ok到这里你已经可以播放起一首歌曲了。并且可以在activity上进行上一首下一首的切换。
下面就该讲如何用notification控制并且同步activity的方法
首先我们把上面的NotificationCompat准备好。每个方法看方法名应该就懂了吧。
在这三个方法中进行状态的变更。准备好这些后。我们到activity去。
Step1连接MusicService
进行连接后初始化一些服务及回调。用以更变ui
当初始化完毕后我们就访用到前面的
MediaController
通过注册回调就与service中的MediaSession有了连接。当音乐状态有改变的时候就会加回调到这里来
Ok到这里基本的设置都已完毕具体的一些seekbar更新控制等。可以看源码。并且对整体做了封装注释也很完整。相信一次就能看明白。媒体流方面的的确比较麻烦。也难怪网上的资料少呢。哎。对了有个问题。就是MediaPlayer.prepareAsync()方法一直有个 -38但不影响播放不知道哪位大神知道呢。
github:https://github.com/EasonHolmes/MediasessioncompatExample