logo
0
0
WeChat Login
zhouhao<zhouhao3207@qq.com>
refactor: update project title in README for consistency

music-player

一个简单的 Android 音乐播放器示例项目:

  • 首页展示在线音乐列表(网络接口返回)
  • 点击歌曲播放/暂停/切歌/拖动进度
  • 点击 MV 按钮进入视频页播放 MV(使用 Media3 ExoPlayer)

项目以“主流程跑通”为目标,代码尽量直观,适合新手阅读与二次开发。

环境要求

  • Android Studio(建议较新版本)
  • Android Gradle Plugin: 8.4.0
  • compileSdk: 34
  • targetSdk: 34
  • minSdk: 33(Android 13)

如何运行

用 Android Studio

  1. 用 Android Studio 打开项目根目录
  2. 等待 Gradle Sync 完成
  3. 连接真机或启动模拟器(Android 13+)
  4. 点击 Run 运行 app

用命令行(构建)

./gradlew assembleDebug

注意事项

  • 接口是 HTTP:音乐列表接口为 http://food1.api.sziit.top/music/list,因此在 AndroidManifest.xml 中开启了 android:usesCleartextTraffic="true"
  • 模拟器视频渲染差异:部分模拟器/图形配置下可能出现“有声无画/不同步”等现象。视频页使用 PlayerView + texture_view 来尽量提高兼容性;更推荐在真机上验证播放效果。
  • Gradle 依赖下载:项目在 settings.gradle 中补充了阿里云镜像源,主要用于某些环境下访问 dl.google.com 出现 TLS 握手失败时的兜底。

功能清单

  • 在线音乐列表展示
  • 点击歌曲开始播放
  • 播放/暂停、上一首、下一首
  • 音乐播放进度回调与拖动跳转
  • MV 视频播放页:
    • 点击画面切换播放/暂停
    • 显示视频进度 mm:ss/mm:ss
    • 拖动 SeekBar 跳转

目录结构(核心)

app/src/main/ AndroidManifest.xml java/com/sziit/musicplayer/ ui/ activity/ # Activity:MainActivity、VideoActivity fragment/ # Fragment:列表页、底部播放器 adapter/ # RecyclerView 适配器 service/ # MusicService:后台播放、列表加载、进度通知 model/ # Song/SongResponse:数据模型 utils/ # HttpUtils、TimeUtils 等工具 listener/ # OnMusicPlayerListener:播放回调接口 res/layout/ # activity/fragment/item 布局 res/drawable/ # 矢量图标等资源

代码组织与流程概览

App 启动与界面结构

  • 启动页为 MainActivity,启动后会 startService(MusicService),让音乐服务常驻。
  • 主界面布局 activity_main.xml 由两个 Fragment 组成:
    • MusicListFragment:展示音乐列表
    • PlayerFragment:底部播放器控制条

音乐播放(MusicService)

MusicService 使用系统 MediaPlayer 实现音乐播放,负责:

  • 启动时拉取音乐列表(OkHttp 请求 + Gson 解析)
  • 维护当前播放列表与索引
  • 对外提供 play/pause/resume/seekTo/playNext/playPre 等控制方法
  • Timer 定时回调进度(每秒一次)到 OnMusicPlayerListener

Fragment 通过 bindService 拿到 MusicService 实例来调用这些方法。

音乐列表(MusicListFragment)

  • 绑定 MusicService 后,设置 OnMusicListLoadListener,接收列表数据并交给 MusicListAdapter 渲染。
  • 点击歌曲:调用 musicService.play(song) 播放音乐。
  • 点击 MV:跳转到 VideoActivity,并传入 mv/song/singer 参数。

底部播放器(PlayerFragment)

  • 绑定 MusicService 并设置 OnMusicPlayerListener
  • 接收服务回调更新 UI(封面、播放状态、进度与时间)
  • 用户点击播放/暂停、上一首/下一首、拖动进度条时调用服务接口

MV 视频播放(VideoActivity)

  • 视频页使用 Media3 ExoPlayer 播放 mv 地址,播放器界面为 PlayerView(关闭默认控制器,使用自定义播放按钮与 SeekBar)
  • 通过 Handler 定时刷新 SeekBartv_duration 显示

依赖说明(简要)

  • OkHttp:网络请求
  • Gson:JSON 解析
  • Glide:图片加载(歌曲封面)
  • Media3(ExoPlayer + UI):视频播放