一款面向 Android 的双模音乐播放器,同时打通「本地媒体库」与「在线流媒体」两条链路。
本地链路:扫描系统媒体库并过滤短铃声,按歌曲 / 歌手 / 专辑 / 文件夹四级分组浏览,支持播放、暂停、上下曲、进度拖动、随机与三种循环模式、收藏与歌单管理(新建、添加、整单播放)。
在线链路:聚合多个音乐源完成搜索与流式播放,边播边缓存,已下载文件自动优先走本地播放;下载管理支持断点续传、暂停恢复、批量下载与文件清理。
体验与系统能力:后台播放 + MediaStyle 通知栏(封面与控制按钮)、音频焦点处理与拔耳机自动暂停、睡眠定时器(播放页实时倒计时)、可视化频谱、同步歌词(在线匹配 + 本地 .lrc,UTF-8/GBK 转码,自动滚动高亮)、桌面小部件,并完成 Android 13+ 分区存储与新权限模型适配。
技术栈:Kotlin 2.0 + Jetpack Compose + Material3,全项目 97 个 Kotlin 源文件、约 1.1 万行代码。
架构:MVVM 分层(domain / data / presentation / playback),领域模型与 Android 框架解耦;单 Activity + Compose 组织界面。
播放层:基于 Media3 的 ExoPlayer + MediaSessionService 实现后台播放与系统媒体控制,配合音频焦点与耳机插拔广播做播放状态收敛。
数据层:Room 持久化歌单与收藏,MediaStore 扫描本地媒体;Retrofit + OkHttp + kotlinx-serialization 对接在线音源,流式播放使用本地 SimpleCache 边播边存,下载走 OkHttp 断点续传。
工程:Hilt 依赖注入、Coroutines + Flow 统一异步、Coil 加载封面;Gradle Wrapper 8.14.3 构建,release 包用本地 keystore 签名,产出约 2.8MB 的 APK;迭代过程用自动化脚本推送测试音频并逐屏截图做视觉验收。