news 2026/5/15 16:54:40

Flutter for OpenHarmony 本地音乐播放器APP

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 依赖配置

dependencies:flutter:sdk:flutteraudioplayers_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️⃣ 音乐数据模型 — 规范歌曲信息

classMusicSongextendsHiveObject{@HiveField(0)StringsongName;@HiveField(1)Stringsinger;@HiveField(2)StringsongPath;@HiveField(3)int duration;@HiveField(4)bool isCollect;MusicSong({requiredthis.songName,requiredthis.singer,requiredthis.songPath,requiredthis.duration,this.isCollect=false});}

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

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

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

finalAudioPlayerplayer=AudioPlayer();Future<void>playMusic(Stringpath)async{awaitplayer.setSourceDeviceFile(path);awaitplayer.setVolume(1.0);awaitplayer.resume();}

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

WidgetbuildProgressSlider(){returnSlider(min:0,max:totalTime.value.toDouble(),value:currentTime.value,onChanged:(v)async{awaitplayer.seek(Duration(milliseconds:v.toInt()));});}

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

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

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

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

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

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


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/15 16:51:04

Odrive 0.5.5固件探秘:避开Board/main.c的坑,找到真正的程序入口

Odrive 0.5.5固件探秘&#xff1a;避开Board/main.c的坑&#xff0c;找到真正的程序入口 当你第一次打开Odrive 0.5.5的固件代码时&#xff0c;可能会被项目中多个"main"文件搞得晕头转向。特别是对于从STM32标准开发环境转过来的工程师&#xff0c;这种结构看起来既…

作者头像 李华
网站建设 2026/5/15 16:51:03

计算机网络 第1章 网络体系结构

计算机网络 第1章 1.因特网 1.1what 因特网: “网络的网络”.因特网作为基础设施(Infrastructure)为各种应用提供通信服务;提供应用程序编程接口(API). 协议(Protocol)&#xff1a;协议定义了在两个或多个通信实体之间交换的报文格式和次序&#xff0c;以及报文发送和/或接收一…

作者头像 李华
网站建设 2026/5/15 16:45:06

WebToEpub:5分钟快速制作专业EPUB电子书的完整指南

WebToEpub&#xff1a;5分钟快速制作专业EPUB电子书的完整指南 【免费下载链接】WebToEpub A simple Chrome (and Firefox) Extension that converts Web Novels (and other web pages) into an EPUB. 项目地址: https://gitcode.com/gh_mirrors/we/WebToEpub 还在为在线…

作者头像 李华
网站建设 2026/5/15 16:44:25

基于HalBot框架的聊天机器人开发:从插件化架构到生产部署

1. 项目概述&#xff1a;一个轻量级、可扩展的聊天机器人框架如果你正在寻找一个能快速上手、易于定制&#xff0c;并且能轻松集成到现有系统里的聊天机器人框架&#xff0c;那么Leask/halbot这个名字可能已经出现在你的雷达上了。它不是一个功能大而全的“全家桶”&#xff0c…

作者头像 李华
网站建设 2026/5/15 16:42:05

从SurrealDB文档站剖析现代技术文档工程:Next.js+Contentlayer+Algolia实践

1. 项目概述&#xff1a;一个数据库文档站点的诞生与挑战最近在折腾一个很有意思的项目&#xff0c;不是直接去用 SurrealDB 这个新型数据库&#xff0c;而是去研究它的官方文档站点docs.surrealdb.com的构建。乍一看&#xff0c;这似乎只是个“附属品”&#xff0c;但当你深入…

作者头像 李华