Flutter for OpenHarmony 本地音乐播放器APP

开源鸿蒙跨平台社区:https://gitee.com/openharmony-sig/flutter_flutter


📖 项目概述

现在市面上音乐APP广告泛滥、强制开会员、后台偷跑流量、复杂臃肿!🙄 很多鸿蒙用户只想简简单单播放手机本地音乐,不需要直播、推荐、充值弹窗!传统音乐软件痛点非常明显:

  • 广告繁多:开屏广告、弹窗广告、推送广告,严重干扰听歌体验

  • 强制联网:哪怕播放本地歌曲也要联网校验、加载推荐

  • 占用过大:安装包几百兆,低配鸿蒙手机卡顿发烫

  • 权限过度:索要通讯录、定位等无关权限,隐私不安全

今天带大家从零开发一款纯净无广告、轻量化本地音乐播放器✨!基于 Flutter for OpenHarmony 开发,只专注本地音乐扫描、播放、收藏、歌单,极简UI、超低功耗,完美适配鸿蒙手机、平板、智慧屏,无任何多余流氓功能!


🎯 核心功能

功能模块 具体能力 体验亮点
🎵 本地音乐扫描 全盘扫描音频文件、自动分类筛选、过滤无效音频 一键导入全部歌曲,无需手动添加!
▶️ 多功能播放 顺序/单曲/随机播放、进度拖拽、音量调节 手势操作丝滑,贴合鸿蒙原生交互!
❤️ 收藏歌单 歌曲收藏、自定义歌单、批量添加歌曲 个性化管理,打造专属音乐库!
🌙 系统适配 深浅色模式、锁屏播放、后台保活播放 熄屏也能切歌,适配鸿蒙系统规则!

💡 第三方库选择理由(OpenHarmony 专属适配)

🎧 audioplayers_ohos — 鸿蒙专属音频播放库

OpenHarmony 适配优势

  • 🔊 对接鸿蒙原生音频服务,后台保活播放,切应用不中断音乐

  • ⚡ 解码效率极高,无损音乐、高清音频流畅解析无杂音

  • 🔋 功耗优化,播放状态下极低耗电,适合长时间听歌

  • 🎛️ 适配鸿蒙音量键、耳机线控,原生操控逻辑一致

📂 on_audio_query — 本地音频扫描库

OpenHarmony 适配优势

  • 📁 适配鸿蒙沙箱文件权限,安全扫描本地音频文件

  • ⚙️ 自动过滤短视频杂音、录音文件,只保留正规音乐

  • 🖼️ 自动读取歌曲封面、歌手、时长,无需手动解析

  • 🚀 扫描速度快,千首歌曲5秒内全部加载完成

🎞️ shimmer — 骨架屏加载动画库

OpenHarmony 适配优势

  • ✨ 遵循鸿蒙柔和动效设计,加载动画简约高级不刺眼

  • 📉 极低渲染功耗,低配鸿蒙设备也不会卡顿掉帧

  • 🌓 自动适配深浅色模式,动画色调跟随系统切换

  • 🧩 轻量无冗余,不增加APP安装包体积

💾 hive_ohos — 鸿蒙高性能本地存储

OpenHarmony 适配优势

  • 🗄️ 加密存储收藏歌曲、播放记录,重启APP数据不丢失

  • ⚡ 读写速度远超传统存储,打开秒加载播放列表

  • ☁️ 适配鸿蒙分布式数据,多设备同步收藏歌单

  • 🛡️ 沙箱隔离存储,保护用户音乐隐私数据


📦 环境配置

pubspec.yaml 依赖配置

dependencies:
  flutter:
    sdk: flutter
  audioplayers_ohos: ^5.2.0      # 鸿蒙音频播放
  on_audio_query: ^2.9.0         # 本地音乐扫描
  shimmer: ^3.1.0                # 骨架加载动画
  hive_ohos: ^2.2.0              # 本地持久化存储
  hive_flutter_ohos: ^1.1.0

OpenHarmony 权限配置

module\.json5 中添加:

"requestPermissions": [
  {
    "name": "ohos.permission.READ_MEDIA",
    "reason": "读取本地音乐音频文件"
  },
  {
    "name": "ohos.permission.BACKGROUND_AUDIO",
    "reason": "允许后台持续播放音乐"
  }
]

🧩 分模块详解

1️⃣ 音乐数据模型 — 规范歌曲信息

class MusicSong extends HiveObject {
  (0) String songName;
  (1) String singer;
  (2) String songPath;
  (3) int duration;
  (4) bool isCollect;
  MusicSong({required this.songName,required this.singer,
    required this.songPath,required this.duration,this.isCollect = false});
}

2️⃣ 本地音乐扫描 — 全盘读取音频

Future<List<MusicSong>> scanLocalMusic() async {
  OnAudioQuery audioQuery = OnAudioQuery();
  List<SongModel> songList = await audioQuery.querySongs();
  return songList.map((e) => MusicSong(
      songName: e.title,singer: e.artist ?? "未知歌手",
      songPath: e.data,duration: e.duration ?? 0)).toList();
}

3️⃣ 音频播放控制器 — 播放暂停管理

final AudioPlayer player = AudioPlayer();
Future<void> playMusic(String path) async {
  await player.setSourceDeviceFile(path);
  await player.setVolume(1.0);
  await player.resume();
}

4️⃣ 进度条拖拽 — 精准跳转播放位置

Widget buildProgressSlider() {
  return Slider(min: 0,max: totalTime.value.toDouble(),
    value: currentTime.value,onChanged: (v) async{
      await player.seek(Duration(milliseconds: v.toInt()));
    });
}

5️⃣ 播放模式切换 — 顺序/随机/单曲

void changePlayMode() {
  if(mode == PlayMode.sequence) mode = PlayMode.random;
  else if(mode == PlayMode.random) mode = PlayMode.single;
  else mode = PlayMode.sequence;
  showToast("已切换为${mode.name}播放模式");
}

6️⃣ 歌曲收藏功能 — 本地永久保存

Future<void> collectSong(MusicSong song) async {
  song.isCollect = !song.isCollect;
  await song.save();
  if(song.isCollect){
    showToast("❤️ 收藏成功");
  }else showToast("已取消收藏");
}

7️⃣ 骨架屏加载 — 优化空白等待体验

Widget buildLoadingSkeleton() {
  return Shimmer.fromColors(baseColor: Colors.grey[200]!,
    highlightColor: Colors.white,child: ListView.builder(
    itemCount: 8,itemBuilder: (_,i) => MusicSkeletonItem()));
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


🏆 完整实现总结

📁 项目结构

lib/
├── models/          # 音乐实体模型
├── screens/         # 页面
│   ├── music_list.dart    # 歌曲列表页
│   ├── play_page.dart     # 播放详情页
│   └── collect_page.dart  # 我的收藏页
├── widgets/         # 播放器组件、骨架屏
└── utils/           # 音频工具、存储工具

✨ 核心亮点总结

  1. 零广告纯纯净:无联网、无推送、无充值,纯粹本地音乐播放

  2. 鸿蒙深度适配:后台播放、线控切歌、熄屏播放全部支持

  3. 极致轻量化:安装包不足15MB,低配鸿蒙手机流畅运行

  4. 隐私安全可靠:仅读取本地音频,无多余权限、无数据上传

🎮 运行效果描述

在OpenHarmony设备安装运行后,首次授权媒体权限,APP自动全盘扫描本地音乐。首页展示全部歌曲列表,搭配柔和骨架屏加载动画;点击歌曲进入播放页,展示歌曲封面、进度条、播放模式切换按钮;支持后台挂听、锁屏控歌;喜欢的歌曲一键收藏,收藏数据永久本地保存。整体UI简约清新,贴合鸿蒙极简美学,动画丝滑、无卡顿、无广告,是一款完美替代商用音乐软件的本地播放器!


Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐