济南哪里有网站公司网站建设与网页设计课

张小明 2025/12/31 23:24:41
济南哪里有网站公司,网站建设与网页设计课,吉他网站怎么做,北仑seo排名优化技术鸿蒙原生应用深度实战#xff1a;用 ArkTS Stage 模型开发高性能跨端音乐播放器 #x1f4cc; 为什么选择音乐播放器作为鸿蒙实战项目#xff1f; 音乐播放器是集 UI、媒体、后台、通知、多端适配于一体的典型应用#xff0c;能全面展示鸿蒙原生能力#xff1a; ✅ 媒体…鸿蒙原生应用深度实战用 ArkTS Stage 模型开发高性能跨端音乐播放器 为什么选择音乐播放器作为鸿蒙实战项目音乐播放器是集 UI、媒体、后台、通知、多端适配于一体的典型应用能全面展示鸿蒙原生能力✅媒体控制AudioRenderer AVPlayer✅后台运行UIAbility 后台任务管理✅系统集成锁屏控件、通知栏控制✅跨端适配手机、平板、车机 UI 自适应✅状态管理State / StorageLink / AppStorage本文目标手把手教你用HarmonyOS 最新 Stage 模型 ArkTS开发一个功能完整、性能流畅、体验统一的跨端音乐播放器并部署到真机运行一、项目效果预览手机端竖屏平板/车机端横屏✅ 支持歌曲列表浏览播放/暂停/上一首/下一首进度拖拽锁屏控制后台持续播放横竖屏自适应布局二、技术架构设计MusicPlayer/ ├── src/main/ │ ├── ets/ │ │ ├── entryability/ │ │ │ └── EntryAbility.ts ← 应用入口Stage模型 │ │ ├── common/ │ │ │ └── constants.ts ← 常量定义 │ │ ├── model/ │ │ │ ├── MusicItem.ts ← 歌曲数据模型 │ │ │ └── MusicPlayerModel.ts ← 播放器核心逻辑 │ │ ├── pages/ │ │ │ ├── MainPage.ets ← 主页面列表播放控件 │ │ │ └── PlayerPage.ets ← 全屏播放页 │ │ └── components/ │ │ ├── SongListItem.ets ← 歌曲列表项 │ │ └── PlayControlBar.ets ← 播放控制条 │ └── resources/ │ ├── base/ │ │ ├── media/ ← 音乐文件示例 │ │ └── element/ ← 字符串、颜色等 │ └── en_US/ ← 多语言支持 └── module.json5 ← 模块配置声明后台权限三、关键能力实现详解3.1 声明后台播放权限module.json5{ module: { name: entry, type: entry, requestPermissions: [ { name: ohos.permission.KEEP_BACKGROUND_RUNNING }, { name: ohos.permission.MEDIA_CONTROL } ], abilities: [ { name: EntryAbility, srcEntry: ./ets/entryability/EntryAbility.ts, exported: true, backgroundModes: [audio] // 关键允许音频后台播放 } ] } }⚠️必须声明backgroundModes: [audio]否则切后台会自动暂停3.2 歌曲数据模型MusicItem.ts// model/MusicItem.tsexportclassMusicItem{id:string;title:string;artist:string;duration:number;// 秒uri:Resource;// 鸿蒙资源引用如 $r(app.media.song1)constructor(id:string,title:string,artist:string,duration:number,uri:Resource){this.idid;this.titletitle;this.artistartist;this.durationduration;this.uriuri;}}// 示例歌曲数据exportconstMOCK_SONGS:MusicItem[][newMusicItem(1,夜曲,周杰伦,230,$r(app.media.yequ)),newMusicItem(2,晴天,周杰伦,267,$r(app.media.qingtian)),newMusicItem(3,七里香,周杰伦,248,$r(app.media.qilixiang))]; 使用$r(app.media.xxx)引用resources/base/media/下的音频文件3.3 核心播放器逻辑MusicPlayerModel.ts// model/MusicPlayerModel.tsimport{AVPlayer,AVPlayerCallback}fromohos.multimedia.avplayer;classMusicPlayer{privatestaticinstance:MusicPlayer;privateavPlayer:AVPlayer|nullnull;privatecurrentSong:MusicItem|nullnull;privateisPlaying:booleanfalse;privateconstructor(){}publicstaticgetInstance():MusicPlayer{if(!MusicPlayer.instance){MusicPlayer.instancenewMusicPlayer();}returnMusicPlayer.instance;}asyncinitPlayer():Promisevoid{if(this.avPlayer)return;try{this.avPlayerawaitAVPlayer.create();this.avPlayer.on(playbackComplete,(){// 播放完成自动下一首this.playNext();});this.avPlayer.on(timeUpdate,(time:number){// 进度更新用于UI同步AppStorage.SetOrCreatenumber(currentTime,time);});}catch(error){console.error(Failed to create AVPlayer:,error);}}asyncplay(song:MusicItem):Promisevoid{if(!this.avPlayer)awaitthis.initPlayer();if(this.currentSong?.id!song.id){// 切换歌曲awaitthis.avPlayer?.setSource(song.uri);this.currentSongsong;AppStorage.SetOrCreatenumber(totalTime,song.duration);}awaitthis.avPlayer?.play();this.isPlayingtrue;AppStorage.SetOrCreateboolean(isPlaying,true);}asyncpause():Promisevoid{awaitthis.avPlayer?.pause();this.isPlayingfalse;AppStorage.SetOrCreateboolean(isPlaying,false);}asyncseekTo(time:number):Promisevoid{awaitthis.avPlayer?.seekTo(time);}// 上一首/下一首逻辑略asyncplayNext(){/* ... */}asyncplayPrev(){/* ... */}getCurrentTime():number{returnthis.avPlayer?.currentTime||0;}}// 全局单例exportconstmusicPlayerMusicPlayer.getInstance();关键点使用单例模式确保全局唯一播放器实例通过AppStorage跨组件同步播放状态监听timeUpdate实现进度条实时更新3.4 主页面 UIMainPage.ets// pages/MainPage.etsimport{MOCK_SONGS}from../model/MusicItem;import{musicPlayer}from../model/MusicPlayerModel;import{SongListItem}from../components/SongListItem;import{PlayControlBar}from../components/PlayControlBar;Entry Component struct MainPage{State songs:ArrayanyMOCK_SONGS;Watch(onPlayingChange)StorageLink(isPlaying)isPlaying:booleanfalse;onPlayingChange(){// 播放状态变更时刷新UI}build(){Column(){// 标题Text(我的音乐).fontSize(24).fontWeight(FontWeight.Bold).margin({bottom:20})// 歌曲列表List(){ForEach(this.songs,(song){ListItem(){SongListItem({song:song,onClick:(){musicPlayer.play(song);}})}},itemitem.id)}.layoutWeight(1)// 播放控制条固定底部PlayControlBar().width(100%).height(80)}.width(100%).height(100%).padding(20)}}3.5 播放控制条组件PlayControlBar.ets// components/PlayControlBar.etsObservedclassPlayState{StorageLink(currentSong)currentSong:anynull;StorageLink(isPlaying)isPlaying:booleanfalse;StorageLink(currentTime)currentTime:number0;StorageLink(totalTime)totalTime:number0;}Componentexportstruct PlayControlBar{State statenewPlayState();build(){if(!this.state.currentSong){// 未播放任何歌曲时显示占位Row().width(100%).height(100%).backgroundColor(#f0f0f0);return;}Row(){// 专辑封面简化为色块Blank().width(50).height(50).borderRadius(8).backgroundColor(#4a90e2)Column(){Text(this.state.currentSong.title).fontSize(16).maxLines(1).textOverflow({overflow:TextOverflow.Ellipsis})Text(this.state.currentSong.artist).fontSize(12).fontColor(#666).maxLines(1).textOverflow({overflow:TextOverflow.Ellipsis})}.layoutWeight(1).margin({left:10})// 播放按钮Button(this.state.isPlaying?⏸:▶).onClick((){if(this.state.isPlaying){musicPlayer.pause();}else{// 恢复播放当前歌曲musicPlayer.play(this.state.currentSong);}}).width(40).height(40).borderRadius(20)}.width(100%).height(100%).padding(10).backgroundColor(#fff).border({width:1,color:#eee,style:BorderStyle.Solid})}} 使用StorageLink监听全局状态实现跨页面状态同步四、跨端适配响应式布局鸿蒙通过displayConditionif/else实现多端 UI// 在 MainPage.ets 中build(){Column(){if(displayCondition.isLandscape()){// 横屏布局如车机Row(){List(){/* ... */}.width(70%)PlayerPage().width(30%)// 右侧显示播放详情}}else{// 竖屏布局手机Column(){List(){/* ... */}.layoutWeight(1)PlayControlBar()}}}}✅无需写两套代码一套逻辑适配所有设备五、真机调试与部署5.1 准备工作华为手机升级至HarmonyOS 4.0开启“开发者选项” → “USB调试”DevEco Studio 登录华为开发者账号5.2 运行步骤将 MP3 文件放入resources/base/media/点击Run → Run ‘entry’选择已连接的鸿蒙设备应用自动安装并启动实测效果冷启动 0.5s后台播放稳定锁屏可控制内存占用 25MB六、性能优化技巧问题解决方案列表卡顿使用LazyForEach替代ForEach内存泄漏在onDestroy中释放 AVPlayer电量消耗高降低timeUpdate回调频率默认1s包体积大使用HAP 分包加载音乐资源七、扩展方向在线音乐集成 HMS Core Audio Kit歌词同步解析 LRC 文件高亮当前句蓝牙控制响应车载蓝牙播放指令分布式播控手机控制智慧屏播放八、总结本文通过开发鸿蒙原生音乐播放器完整展示了✅Stage 模型下的 Ability 生命周期管理✅AVPlayer媒体播放核心 API 使用✅AppStorage / StorageLink全局状态管理✅响应式布局实现多端 UI 适配✅后台播放与系统集成能力你已掌握鸿蒙中高级应用开发的核心技能 学习资源鸿蒙媒体开发指南Stage 模型详解AppStorage 最佳实践GitHub 完整代码harmonyos-music-player原创声明本文首发于 CSDN转载需授权。欢迎点赞收藏获取更多鸿蒙实战教程✅本文价值真实项目驱动非 Hello World覆盖媒体、后台、多端等核心场景提供完整可运行代码包含真机调试经验欢迎大家加入开源鸿蒙跨平台开发者社区一起共建开源鸿蒙跨平台生态。立即动手用 ArkTS 构建你的下一个鸿蒙爆款应用
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

抚顺网站设计网站建设中 html5 模板

使用 Miniconda 创建 Python 3.8 环境:从零开始的实践指南 在真实项目中,你有没有遇到过这样的情况?一个原本运行正常的机器学习脚本,在换了一台电脑或升级了某个库之后突然报错——可能是 numpy 不兼容,也可能是 ten…

张小明 2025/12/31 2:49:11 网站建设

网站提供什么服务网站开发实训心得800

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

张小明 2025/12/30 19:42:38 网站建设

怎么在试客网站做佣金单网页设计与制作商丘到的公司

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

张小明 2025/12/31 22:31:24 网站建设

做网站seo广州建设网站方案

在Java高并发服务中,GC吞吐量是衡量系统性能的核心指标之一——行业通用标准要求生产环境GC吞吐量不低于99%,一旦低于95%,就可能导致服务响应延迟、并发能力下降,甚至引发超时熔断。本文将以“GC吞吐量仅92%”的生产级问题为切入点…

张小明 2025/12/31 13:53:13 网站建设

广州智能建站软件南昌seo服务

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个企业级Node.js依赖管理仪表板,功能包括:1. 可视化展示项目依赖树;2. 高亮显示存在兼容性问题的模块(如minimatch10.0.3);3. …

张小明 2025/12/28 21:54:58 网站建设

福田企业网站推广哪里好wordpress导出word

【免费下载链接】agentscope 项目地址: https://gitcode.com/GitHub_Trending/ag/agentscope "为什么我的模型总是对接不上?"——这是我在集成自定义模型时最常问自己的问题。今天,就让我这个踩过无数坑的"技术探险者"来分享…

张小明 2025/12/31 13:18:46 网站建设