毕业设计做的项目答辩已结束,现发出来与大家分享。
毕设背景:千千静听(后被百度收购)老牌PC音乐播放器,本次希望将经典功能迁移至安卓端,实现安卓本地音乐播放YYDS。
特色:
频谱展示(发现某Q音乐、某云音乐均无此功能),于是想整个安卓端出来,定义一些需要的功能。
MV展示:聚合某云、某Q,B站等主流站点,使用WebView。
开发环境:Android Studio 64位
jdk:11
compileSdk 32
minSdk 25
targetSdk 32
Gradle版本: gradle-7.2-bin.zip
简介:
扫描本地音乐,过滤flac,mp3有效文件;
播放本地音乐,实现播放、暂停、上一首、下一首;
歌词显示,自动匹配音乐文件同目录的歌词文件;
特色:仿千千静听UI频谱功能,已实现了基础功能。 更炫彩的音频、DSP均衡器需要UI设计,想搞但实在是没时间搞。
项目组成介绍
src:代码
drable:图标icon素材
layout:布局文件
reset:打包到apk的音乐文件,目标手机无音乐时可用作测试播放。
更新说明:
安卓音乐播放器仿千千静听支持歌词同步
【V2.0】
Cursor扫描本地音频文件,过滤mp3,flac格式 MusicControl实现基础音乐播放 最小化、切换Fragment后仍可播放 缺点:切换Fragment不能及时释放资源
【V3.0】
#PagerView实现歌曲列表、歌词显示
#LrcView:歌词视图
https://github.com/wangchenyan/lrcview 同目录lrc文件歌词同步
【V4.0】
#Service 音乐后台播放、控制
#外来电话、声音,捕捉焦点并暂停播放
#检测播放结束,自动下一曲
#MV,通过WebView实现 #歌手列表, GridView实现
#通知栏显示:Notification+自定义Remoteview实现。
坑点:通知栏,需要格外注意安卓API 8.0以上需要声明NotificationChannel才会显示,不然找原因会让你找的怀疑人生。
【待开发功能】
专辑旋转封面,仿网易云碟片
圆角图片处理
音乐控制改为后台方式
Service
音频焦点实现外接电话等自动停止播放
使用系统服务AudioManger
按歌手,按专辑分类 Cursor过滤 HashSet遍历list存储专辑、歌手信息实现去重
歌词匹配
优先匹配本地歌词,找不到则搜索网络歌词 歌词API:歌词迷,网易云 http/json获取解析
MV显示
暂时通过
千千静听其他功能打开指定音乐文件音效均衡DSP换肤
音乐文件信息修改:专辑封面、歌手、风格等信息
歌单自定义
创建歌单、增加歌曲到歌单
通知栏音乐控件 可能不同安卓版本、手机厂家小米欧珀显示不同
局域网聊天模式 同一wlan下识别在线人数,发送/接收聊天信息 显示每个人正在听的歌曲,如xx在听:后海
【待优化问题】
不同终端厂家版本、分辨率适配。
【难点问题记录】
Fragment跳转后原内容仍显示,只能改为PagerView实现左右滑动切换 Fragment通过底下Tab切换后闪退,问题是该Fragment的 销毁函数一些释放引起。 (难点)
Fragment绑定Service未实现,百度查了一下应该是不可以。改为Activity与Service交互。这个问题折腾了好久。 利用static静态变量实现Activity与Fragment之间传递参数(继承各种监听事件,从而传递List)实现控制上一曲、下一曲。
首先activity绑定service,初始化service的静态mediaplayer 然后fragment修改mediaplayer上一曲、下一曲状态
参考:
https://blog.csdn.net/weixin_34220834/article/details/88030672
通知栏不显示问题:Notifications(已解决)
还没找到原因,怀疑是安卓8以上参数问题
最终原因:测试机是安卓11,Channel未声明引起。
参考:
网易云音乐安卓版,千千静听PC版
Service教程:
https://www.cnblogs.com/yanglh6-jyx/p/Android_Service_MediaPlayer.html
项目截图
获取代码方式:
关注公众号:腾里精选 右下角音乐播放器源码获取