使用MediaSessionCompat+MediaPlayer音频播放

×

不说其他先爆照

Paste_Image.png
Paste_Image.png

Ok现在该说正事了。写这个不为别的。只因为我发现网上竟然没有什么文章–.没办法。自己研究了。虽然现在第三库挺多。但是有些基础还是要明白 。首先需要介绍下几个需要使用到的类的作用。

Paste_Image.png
  • 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

Paste_Image.png

Step2初始化各种服务

Paste_Image.png

Step3设置MediaSession回调

Paste_Image.png
Paste_Image.png

上面各种方法注释已经写的很清楚了。简书写代码和文字混排太难看了。还是写程序里的好

Step4设置MediaPlayer的播放回调

这里设置两个回调一个是播放准备。当播放器准备好后回会调
另一个是缓冲更新时的回调(更新seekBar)


Paste_Image.png
Paste_Image.png

Ok到这里你已经可以播放起一首歌曲了。并且可以在activity上进行上一首下一首的切换。

下面就该讲如何用notification控制并且同步activity的方法

Paste_Image.png

首先我们把上面的NotificationCompat准备好。每个方法看方法名应该就懂了吧。

Paste_Image.png
Paste_Image.png

在这三个方法中进行状态的变更。准备好这些后。我们到activity去。

Step1连接MusicService

进行连接后初始化一些服务及回调。用以更变ui

Paste_Image.png
Paste_Image.png

当初始化完毕后我们就访用到前面的MediaController

Paste_Image.png

通过注册回调就与service中的MediaSession有了连接。当音乐状态有改变的时候就会加回调到这里来

Paste_Image.png

Ok到这里基本的设置都已完毕具体的一些seekbar更新控制等。可以看源码。并且对整体做了封装注释也很完整。相信一次就能看明白。媒体流方面的的确比较麻烦。也难怪网上的资料少呢。哎。对了有个问题。就是MediaPlayer.prepareAsync()方法一直有个 -38但不影响播放不知道哪位大神知道呢。

github:https://github.com/EasonHolmes/MediasessioncompatExample

转载自:https://www.jianshu.com/p/028ecd6bbcdf

你可能感兴趣的:(Android)