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简约清新,贴合鸿蒙极简美学,动画丝滑、无卡顿、无广告,是一款完美替代商用音乐软件的本地播放器!


相关推荐
largecode1 小时前
怎么让手机显示公司名?来电显示公司名称认证实现品牌外显
linux·ubuntu·华为od·华为·智能手机·华为云·harmonyos
陆业聪1 小时前
两次Flutter全屏白踩坑复盘:Layout的静默失败,以及AI结对编程的认知盲区
flutter·ai编程·大前端·跨端开发
KKei16381 小时前
Flutter for OpenHarmony 外语单词背诵与听力训练APP
flutter·华为·harmonyos
前端不太难1 小时前
AI Native 鸿蒙 App 的四层架构
人工智能·架构·harmonyos
云和数据.ChenGuang1 小时前
HarmonyOS 手机模拟器开发「随身猜谜语小游戏」的技术实现方案
华为·智能手机·harmonyos
KKei16382 小时前
Flutter for OpenHarmony学习小组组队与打卡APP技术文章
学习·flutter·华为·harmonyos
tangweiguo030519872 小时前
Flutter 集成排查与 APK 瘦身问题解决
flutter
fuquxiaoguang2 小时前
华为灵犀指令集:统一CPU/GPU/AI算力底座的野心与挑战
人工智能·华为·灵犀指令集
KKei16382 小时前
Flutter for OpenHarmony学术论文管理APP技术文章
flutter·华为·harmonyos