Flutter for OpenHarmony 本地音乐播放器APP
现在市面上音乐APP广告泛滥、强制开会员、后台偷跑流量、复杂臃肿!🙄 很多鸿蒙用户只想简简单单播放手机本地音乐,不需要直播、推荐、充值弹窗!广告繁多:开屏广告、弹窗广告、推送广告,严重干扰听歌体验强制联网:哪怕播放本地歌曲也要联网校验、加载推荐占用过大:安装包几百兆,低配鸿蒙手机卡顿发烫权限过度:索要通讯录、定位等无关权限,隐私不安全今天带大家从零开发一款纯净无广告、轻量化本地音乐播放器✨!li
Flutter for OpenHarmony 本地音乐播放器APP
📖 项目概述
现在市面上音乐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/ # 音频工具、存储工具
✨ 核心亮点总结
-
零广告纯纯净:无联网、无推送、无充值,纯粹本地音乐播放
-
鸿蒙深度适配:后台播放、线控切歌、熄屏播放全部支持
-
极致轻量化:安装包不足15MB,低配鸿蒙手机流畅运行
-
隐私安全可靠:仅读取本地音频,无多余权限、无数据上传
🎮 运行效果描述
在OpenHarmony设备安装运行后,首次授权媒体权限,APP自动全盘扫描本地音乐。首页展示全部歌曲列表,搭配柔和骨架屏加载动画;点击歌曲进入播放页,展示歌曲封面、进度条、播放模式切换按钮;支持后台挂听、锁屏控歌;喜欢的歌曲一键收藏,收藏数据永久本地保存。整体UI简约清新,贴合鸿蒙极简美学,动画丝滑、无卡顿、无广告,是一款完美替代商用音乐软件的本地播放器!
更多推荐


所有评论(0)