Harmony鸿蒙实战开发项目—音乐播放器简易版(仿Apple 音乐.app)

一、 系统架构总览

本项目基于 HarmonyOS ArkUI 框架,采用典型的 MVVM(Model-View-ViewModel) 架构设计。系统通过高度解耦的模块化开发,实现了从启动页引导、音乐列表呈现到专业音频播放控制的全链路功能。

  • 视图层 (View):利用声明式 UI 构建,高度还原 iOS 风格的高斯模糊与排版美学。
  • 模型层 (Model):严格定义音乐元数据接口 songItemType 与播放状态接口 PlayStateType
  • 控制层 (Controller/Utils):核心音频引擎基于原生 AVPlayer 封装,负责媒体资源调度。

二、 系统演示截图(功能全拆解)

项目通过三个核心阶段构建完整的用户体验:

  1. 启动与引导:品牌 Logo 展示,平滑过渡至主界面。

    image-20260102203725067
  2. 资料库(仿 Apple Music):采用 List 组件配合极简黑风格,实现沉浸式歌曲浏览。

    image-20260102203744961
  3. 播放核心:模拟胶片旋转动画,集成进度条控制与实时歌名显示。

    image-20260102203812749

三、 系统详细介绍

核心音频处理层 (AVPlayerClass.ets)

注:对应您代码中的 AVPlayerClass 调用逻辑

该层是项目的“心脏”,封装了 HarmonyOS 原生多媒体能力。

  • 单曲调度:通过 singlePlay(item) 接收歌曲元数据,重置并加载 URL 资源。
  • 状态同步:实时监听播放进度,并结合 Emitter 事件机制(参考 EventConstants.ets)将播放时间与状态回传给 UI 层。

数据驱动层 (musicsj.ets / music.ets)

  • 静态路由与配置:在 musicsj.ets 中定义了完整的 songs 数组,模拟云端下发的 JSON 数据结构。
  • 强类型声明:使用 TypeScript 接口(Interface)定义 songItemType,确保了数据从常量到组件传递过程中的类型安全,避免空指针异常。

鸿蒙原生客户端 (Index.ets / Find.ets)

  • Tab 页签导航:在 Index.ets 中使用 Tabs 组件构建底部导航,配合 @Builder 自定义渲染函数实现选中项的高亮动画。
  • iOS 美学复刻:在 Find.ets 中,通过 borderRadius(8)IOS_ACCENT 绯红配色以及自定义的 .divider 边距,完美还原了 iOS 的视觉层次感。
  • 页面转场:利用 pageTransition 钩子函数自定义 opacity 动画,使页面切换更加丝滑。

四、 通信协议定义

系统内部采用标准的 数据模型约定 进行组件间与逻辑间的“通信”:

协议字段 类型 说明
url string 远程音频资源地址(支持 .mp3, .m4a)
playMode enum 播放模式:auto (列表循环), repeat (单曲), random (随机)
EmitEvenType number 跨组件通信事件标识,如 UPDATE_STATE 触发全局 UI 更新

五、 数据流向示例

以“用户点击列表中的一首歌”为例,数据在系统中的流转如下:

  1. 触发阶段:用户在 Find.etsListItem 上触发 .onClick()
  2. 路由阶段router.pushUrl 携带 indexKey 跳转至播放详情页。
  3. 解析阶段:播放页根据 paramssongs 常量中提取对应的 songItemTypeModel 对象。
  4. 执行阶段:调用 AVPlayerClass.singlePlay(item),音频引擎开始拉取流媒体。
  5. 反馈阶段AVPlayer 的状态变化通过 @State 装饰器绑定,驱动播放页面的进度条与胶片旋转。

写在最后、源码

通过百度网盘分享的文件:…zip
链接:https://pan.baidu.com/s/1xbu6QWOItJCKOzAaG49Piw
文件已经加密,请联系请加下方(wx号),获取源码
号码:Lvnvn0508

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐