Flutter for OpenHarmony 本地音乐播放器APP

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 依赖配置

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 中添加:

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

🧩 分模块详解

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

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

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

dart 复制代码
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️⃣ 音频播放控制器 --- 播放暂停管理

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

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

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

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

dart 复制代码
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️⃣ 歌曲收藏功能 --- 本地永久保存

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

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

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




🏆 完整实现总结

📁 项目结构

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

✨ 核心亮点总结

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

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

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

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

🎮 运行效果描述

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


相关推荐
小雨下雨的雨4 分钟前
鸿蒙PC用Electron框架实现矿产分布图
华为·electron·鸿蒙
李二。24 分钟前
鸿蒙原生ArkTS-系外行星百科AI
人工智能·华为·harmonyos
想你依然心痛37 分钟前
HarmonyOS 6(API 23)实战:构建“光愈冥想舱“——智能情绪疗愈系统
华为·ar·harmonyos·智能体
坚果的博客37 分钟前
鸿蒙PC三方库适配OAT.xml 与 SHA512SUM 解读:开源合规与源码校验
xml·开源·harmonyos
小雨下雨的雨1 小时前
电池电量检测工具 - 鸿蒙PC用Electron框架技术实现详解
前端·javascript·华为·electron·鸿蒙·鸿蒙系统
24zhgjx-lxq1 小时前
BGP路由黑洞
网络·安全·华为·智能路由器·hcip·ensp
不爱吃糖的程序媛2 小时前
鸿蒙应用内添加服务卡片到桌面:formProvider.openFormManager 实战
华为·harmonyos
不爱吃糖的程序媛2 小时前
hionic框架设备信息获取:@ionic-native/device 插件在鸿蒙PC平台的适配实践
华为·harmonyos
小雨下雨的雨2 小时前
鸿蒙PC用Electron框架——Canvas蜡笔抖动效果实现技术深度解析
前端·javascript·华为·electron·鸿蒙系统
tigershang3 小时前
华为“韬定律”:从“缩小尺寸”到“压缩时间”——后摩尔时代的规则重塑
单片机·华为·系统架构