安卓仿网易云界面的本地音乐播放器的实现

前言:读研究生之前,老板让学IOS,老老实实看了一个学期的IOS(在这里强烈安利一下腾讯课堂的小码哥IOS视频,基本刚开始只需要10块买第一部,后面的就可以用可视币来兑换了,质量还不错,能学到很多东西,看三部基本IOS就能入门了),结果开学提前两个月被叫去干活,一开会,说IOS暂时没项目,让我学安卓,我。。。好了好了,看了几天郭霖大神的《第一行代码》,然后跟着做了最后的一个项目:酷欧天气。就想着自己做一个东西,于是就做了一个模仿网易云音乐的本地音乐播放器。具体界面如下:

实现的主要功能有:本地音乐的扫描显示、音乐的播放、音乐播放顺序的设置(随机、顺序,单曲循环等)、通知栏显示歌曲播放信息、通过通知栏控制音乐的播放、仿网易云音乐中间胶片旋转和背景虚化效果等。

用到的主要知识有:

1、服务的知识:要想在后台播放音乐,就必须用到服务,具体就是在服务中,让MediaPlayer播放,然后通知Binder接口,在活动中调用服务中的函数控制音乐的播放。这个知识在《第一行代码》中说的很清楚了,就不细说了。

2、MediaPlayer:安卓提供的控制音乐音乐播放的,挺简单的,网上有很多教程。

3、内容提供器:需要用内容提供器获得本地音乐的各种信息,包括歌曲名称,作者,路径,专辑图片等。

4、广播:在音乐播放完的时候,需要利用广播通知活动,控制播放下一首歌,此外,在用通知栏控制音乐播放的时候,也会用到广播。我这里是通过动态注册广播的方式实现的,因为广播类是定义在活动中的内部类,要在内部类中访问一些活动类中的变量。

5、通知:这个是真花费了很多功夫才学会的,因为想要通过通知控制音乐的播放,就要自定义通知栏,要用到remoteview,然后想要监听通知中按钮的点击事件,只能让remoteview发送广播,然后让活动监听控制音乐的播放。我这里是在监听音乐播放完成后广播中一起处理的,一定要注意,在注册广播的时候,要addAction,然后在remoteview设置Intent时,要设置Intent的action,这样才能监听到。

6、实现网易云音乐类似的转盘旋转和背景虚化功能,这个是网上搜集到的。贴个网址:https://blog.csdn.net/jasper_success/article/details/78850679。这个做的很好,但是这个操作很耗时,最好是将这部分内容放到子线程中去执行。

7、多线程:在6中说到,专辑图片的虚化和圆化操作比较耗时,最好是放到子线程中进行,但是问题又来了,在子线程中操作的时候,有可能你图片还没生成,就会切到下一曲了,这样在不同专辑图片过度的时候,就会有很卡的感觉。我这里采用了一种折中的办法,在用户按下下一首,上一首等切歌按键的时候,先让中间胶片旋转暂停,然后等图片在子线程中完全生成了,设置后背景和胶片图片了,再让胶片继续旋转,这样就能很大程度上缓解卡的问题了。

大概用到的知识就是这些了吧,具体的实现细节在源码中详细看吧,源码下载地址:

https://download.csdn.net/download/qq_31709249/10568819

猜你喜欢

转载自blog.csdn.net/qq_31709249/article/details/81253831