HarmonyOS NEXT 实战:基于 Want 与 fileUri 的文件分享功能实现
HarmonyOS NEXT 实战基于 Want 与 fileUri 的文件分享功能实现前言在 HarmonyOS NEXT 应用开发中文件分享是文件管理类应用的高频需求。HarmonyExplorer 最初采用systemShare模块实现分享但在实际编译和运行中发现该方案对沙箱路径的 URI 转换支持不够直接。经过调试最终采用隐式 Want 拉起系统选择面板配合fileUri 模块的方案实现了单文件与多文件批量分享。本文将完整拆解 ShareService 的设计思路、API 选型原因、编译踩坑过程以及最终落地的代码实现。提示本文代码基于 HarmonyOS NEXTAPI 12ArkTS 严格模式编写所有对象字面量均使用显式接口声明可直接集成到工程运行。一、分享方案选型与踩坑1.1 初版方案systemShare 模块最初设计的分享方案基于kit.ShareKit的systemShare模块通过ShareController拉起系统分享面板。该方案在概念上清晰但实际编译时遇到了以下问题问题原因影响fileIo.getUriFromPath不存在fileIo 模块无此方法编译错误 10505001wantConstant.Action属性缺失SDK 版本中 Action 命名空间结构不同编译错误 10505001对象字面量无显式类型ArkTS 严格模式禁止 untyped obj literal编译错误 106050381.2 最终方案隐式 Want fileUri经过对 HarmonyOS 文档的查证最终确定采用以下技术组合使用fileUri模块kit.CoreFileKit的getUriFromPath方法将沙箱路径转换为系统 URI使用Want类型kit.AbilityKit构建隐式意图action字段直接使用字符串常量ohos.want.action.select通过UIAbilityContext.startAbility拉起系统选择面板提示fileUri模块专用于 URI 与路径的互转与fileIo模块的职责分离。在 ArkTS 严格模式下必须从kit.CoreFileKit分别导入这两个模块。1.3 方案对比对比维度systemShare 方案隐式 Want 方案模块依赖kit.ShareKitkit.AbilityKit kit.CoreFileKitURI 获取需自行构造fileUri.getUriFromPath 直接转换面板控制ShareController 生命周期管理系统自动管理编译兼容性存在 Action 属性问题字符串常量无兼容问题代码复杂度较高较低二、ShareService 整体架构2.1 模块导入设计ShareService 的导入设计遵循 ArkTS 严格模式的类型要求所有 Kit 模块均从官方 Kit 包导入// service/ShareService.etsimport{common,Want}fromkit.AbilityKit;import{fileIo,fileUri}fromkit.CoreFileKit;import{AppConstants}from../constants/AppConstants;import{LogUtil}from../utils/LogUtil;关键变更说明wantConstant被移除改用Want类型直接声明意图对象fileUri从kit.CoreFileKit新增导入与fileIo并列Want类型替代了原来的Recordstring, Object无类型声明2.2 类结构设计ShareService 对外暴露两个核心方法覆盖单文件和多文件场景// service/ShareService.etsexportclassShareService{asyncshareFile(filePath:string):Promiseboolean{// 单文件分享实现}asyncshareFiles(filePaths:Arraystring):Promiseboolean{// 多文件批量分享实现}}架构分层职责清晰UI 层FileDetailPage 的 ActionToolbar 触发分享入口ViewModel 层FileDetailViewModel 调用 ShareService 并处理结果Service 层ShareService 编排分享业务流程Kit 层fileUri 负责路径转换Want 负责意图声明提示将分享逻辑收敛到 ShareService 而非散落在 ViewModel 中便于后续扩展分享到指定应用等高级功能。三、单文件分享实现3.1 完整实现代码单文件分享是使用频率最高的场景从文件详情页的 ActionToolbar 触发经过文件校验、URI 转换、意图构建三步完成// service/ShareService.etsasyncshareFile(filePath:string):Promiseboolean{LogUtil.info(TAG,Share file: filePath);try{// 步骤1验证文件是否存在try{fileIo.accessSync(filePath);}catch(e){LogUtil.error(TAG,File not found: filePath);returnfalse;}// 步骤2获取应用上下文constctx:common.Context|nullAppConstants.getContext();if(ctxnull){LogUtil.error(TAG,Context is null);returnfalse;}// 步骤3路径转 URIconsturi:stringfileUri.getUriFromPath(filePath);LogUtil.info(TAG,File URI: uri);// 步骤4构建隐式 WantconstwantParams:Recordstring,Object{key-pick-as-file:true,key-uri:uri};constwant:Want{action:ohos.want.action.select,type:application/octet-stream,parameters:wantParams};// 步骤5拉起系统选择面板constcontextctxascommon.UIAbilityContext;awaitcontext.startAbility(want);LogUtil.info(TAG,Share started for: filePath);returntrue;}catch(err){consterrorMsg:stringerrinstanceofError?err.message:String(err);LogUtil.error(TAG,Failed to share file: errorMsg);returnfalse;}}3.2 关键 API 解析单文件分享涉及的核心 API 如下表所示API模块作用fileIo.accessSynckit.CoreFileKit同步检查文件是否存在fileUri.getUriFromPathkit.CoreFileKit将沙箱路径转换为系统 URIcontext.startAbilitykit.AbilityKit通过隐式 Want 拉起目标 AbilityWantkit.AbilityKit声明意图的数据结构3.3 Want 参数详解Want 对象的每个字段都有明确含义constwant:Want{action:ohos.want.action.select,// 系统选择动作type:application/octet-stream,// 通用二进制流类型parameters:wantParams// 自定义参数};parameters中的键值对含义参数键类型作用key-pick-as-fileboolean标识以文件方式选择key-uristring文件的系统 URI提示action字段使用字符串常量ohos.want.action.select而非wantConstant.Action.ACTION_SELECT是因为在当前 SDK 版本中wantConstant.Action命名空间不存在直接使用字符串常量可避免编译错误。四、多文件批量分享4.1 批量分享实现多文件场景下先逐个校验并收集 URI再构建包含 URI 数组的 Want 一次传递给系统面板// service/ShareService.etsasyncshareFiles(filePaths:Arraystring):Promiseboolean{LogUtil.info(TAG,Share files count: filePaths.length);if(filePaths.length0){returnfalse;}// 单文件直接委托给单文件分享if(filePaths.length1){returnawaitthis.shareFile(filePaths[0]);}try{constctx:common.Context|nullAppConstants.getContext();if(ctxnull){LogUtil.error(TAG,Context is null);returnfalse;}// 逐个校验并收集 URIconsturis:string[]newArraystring();for(leti0;ifilePaths.length;i){try{fileIo.accessSync(filePaths[i]);consturi:stringfileUri.getUriFromPath(filePaths[i]);uris.push(uri);}catch(e){LogUtil.error(TAG,File not found: filePaths[i]);}}if(uris.length0){returnfalse;}// 构建多文件 WantconstwantParams:Recordstring,Object{key-pick-as-file:true,key-uri:uris};constwant:Want{action:ohos.want.action.select,type:application/octet-stream,parameters:wantParams};constcontextctxascommon.UIAbilityContext;awaitcontext.startAbility(want);LogUtil.info(TAG,Share started for uris.length files);returntrue;}catch(err){consterrorMsg:stringerrinstanceofError?err.message:String(err);LogUtil.error(TAG,Failed to share files: errorMsg);returnfalse;}}4.2 单文件与多文件的差异单文件和多文件分享的主要差异在于key-uri参数的值类型场景key-uri 值类型示例单文件stringfile://docs/storage/...多文件string[][file://docs/storage/a.txt, file://docs/storage/b.txt]多文件分享的逻辑设计空列表直接返回 false避免无效调用单文件列表自动委托给shareFile方法保持逻辑统一逐个校验文件存在性跳过不存在的文件而非中断整个流程所有文件都不存在时返回 false避免空 URI 数组传递给系统五、ArkTS 严格模式编译问题修复5.1 问题一fileIo.getUriFromPath 不存在初版代码错误地从fileIo模块调用getUriFromPath但该方法属于fileUri模块// 错误写法 - 编译报错 10505001import{fileIo}fromkit.CoreFileKit;consturi:stringfileIo.getUriFromPath(filePath);// 正确写法import{fileIo,fileUri}fromkit.CoreFileKit;consturi:stringfileUri.getUriFromPath(filePath);5.2 问题二wantConstant.Action 属性缺失wantConstant模块在当前 SDK 版本中不包含Action命名空间需要改用字符串常量// 错误写法 - 编译报错 10505001import{wantConstant}fromkit.AbilityKit;action:wantConstant.Action.ACTION_SELECT,// 正确写法import{Want}fromkit.AbilityKit;action:ohos.want.action.select,5.3 问题三对象字面量缺少显式类型ArkTS 严格模式arkts-no-untyped-obj-literals要求所有对象字面量必须对应显式声明的类或接口。Want 对象不能使用Recordstring, Object声明// 错误写法 - 编译报错 10605038constwant:Recordstring,Object{action:wantConstant.Action.ACTION_SELECT,type:application/octet-stream,parameters:{key-uri:uri}asRecordstring,Object};// 正确写法 - 使用 Want 类型constwantParams:Recordstring,Object{key-pick-as-file:true,key-uri:uri};constwant:Want{action:ohos.want.action.select,type:application/octet-stream,parameters:wantParams};提示parameters字段必须单独声明为Recordstring, Object变量后再赋值给want.parameters不能在 Want 字面量中直接内嵌对象字面量否则同样会触发 10605038 错误。5.4 编译错误汇总错误码错误信息出现次数修复方式10505001Property ‘getUriFromPath’ does not exist on ‘fileIo’2改用 fileUri 模块10505001Property ‘Action’ does not exist on ‘wantConstant’2改用字符串常量10605038Object literal must correspond to declared interface2使用 Want 类型 独立 parameters 变量六、ViewModel 层调用集成6.1 FileDetailViewModel 中的分享调用FileDetailViewModel 作为中间层将 ShareService 的调用封装为简洁的接口供页面调用// viewmodel/FileDetailViewModel.etsimport{ShareService}from../service/ShareService;exportclassFileDetailViewModel{privateshareService:ShareServicenewShareService();asyncshareFile():Promiseboolean{returnawaitthis.shareService.shareFile(this.filePath);}}6.2 FileDetailPage 中的触发入口页面层通过 ActionToolbar 的回调触发分享并处理失败提示// pages/FileDetailPage.etsprivateasyncshareFile():Promisevoid{constsuccess:booleanawaitthis.viewModel.shareFile();if(!success){ToastUtil.show(分享失败);}}privatehandleAction(actionId:string):void{switch(actionId){caseshare:this.shareFile();break;// 其他操作分支...default:break;}}6.3 ActionToolbar 分享按钮配置ActionToolbar 组件通过getActions()方法动态构建操作项列表分享按钮的配置如下// components/ActionToolbar.etsprivategetActions():ActionItem[]{constactions:ActionItem[][{icon:$r(app.media.ic_share),label:分享,actionId:share},// 其他操作项...];returnactions;}七、文件校验与异常处理7.1 文件存在性校验分享前的文件校验使用fileIo.accessSync同步方法通过 try-catch 判断文件是否存在// 文件存在性校验try{fileIo.accessSync(filePath);}catch(e){LogUtil.error(TAG,File not found: filePath);returnfalse;}7.2 异常处理策略ShareService 采用分层异常处理策略每个环节都有独立的 try-catch 和日志记录异常场景处理方式用户感知文件不存在返回 false 日志记录Toast 提示分享失败Context 为 null返回 false 日志记录Toast 提示分享失败startAbility 失败catch 捕获 日志记录Toast 提示分享失败多文件中部分不存在跳过该文件 日志记录无感知继续分享有效文件7.3 日志追踪所有关键节点都有日志记录便于问题排查LogUtil.info(TAG,Share file: filePath);// 分享开始LogUtil.info(TAG,File URI: uri);// URI 转换结果LogUtil.info(TAG,Share started for: filePath);// 面板拉起成功LogUtil.error(TAG,File not found: filePath);// 文件不存在LogUtil.error(TAG,Failed to share file: errorMsg);// 分享失败提示日志中使用统一的 TAG 常量ShareService便于在 HiLog 中过滤和追踪完整的分享调用链。八、fileUri 模块深入解析8.1 fileUri 与 fileIo 的职责区分HarmonyOS NEXT 的kit.CoreFileKit包含多个模块各自职责不同模块职责常用 APIfileIo文件读写、目录操作openSync, readSync, writeSync, accessSyncfileUriURI 与路径互转getUriFromPath, getPathFromUristatfs文件系统空间统计getTotalSize, getFreeSize8.2 URI 格式说明fileUri.getUriFromPath将沙箱路径转换为系统 URI格式遵循file://协议constfilePath:string/data/storage/el2/base/files/test.txt;consturi:stringfileUri.getUriFromPath(filePath);// uri 结果示例: file://bundleName/data/storage/el2/base/files/test.txtURI 的构成部分组成部分含义示例协议文件协议标识file://bundleName应用包名com.example.harmonyexplorer路径沙箱内完整路径/data/storage/el2/base/files/test.txt8.3 URI 在分享中的作用系统选择面板通过 URI 定位文件目标应用通过 URI 读取文件内容。整个数据流如下ShareService 调用fileUri.getUriFromPath生成 URIURI 作为key-uri参数传递给系统选择面板用户选择目标应用后系统将 URI 传递给目标应用目标应用通过 URI 读取文件内容完成分享九、系统选择面板交互流程9.1 完整调用链路从用户点击分享到系统面板展示完整的调用链路如下// 完整调用链路示意// 1. UI 层用户点击 ActionToolbar 的分享按钮ActionToolbar({onAction:(actionId:string){this.handleAction(actionId);// actionId share}})// 2. Page 层handleAction 分发到 shareFileprivatehandleAction(actionId:string):void{switch(actionId){caseshare:this.shareFile();// 调用页面级分享方法break;}}// 3. Page 层调用 ViewModelprivateasyncshareFile():Promisevoid{constsuccess:booleanawaitthis.viewModel.shareFile();}// 4. ViewModel 层委托给 ShareServiceasyncshareFile():Promiseboolean{returnawaitthis.shareService.shareFile(this.filePath);}// 5. Service 层构建 Want 并拉起面板asyncshareFile(filePath:string):Promiseboolean{consturi:stringfileUri.getUriFromPath(filePath);constwant:Want{action:ohos.want.action.select,...};awaitcontext.startAbility(want);}9.2 用户体验要点分享功能的交互设计需要注意以下要点分享按钮位于 ActionToolbar 首位符合用户操作习惯分享失败时通过 Toast 即时反馈不阻塞用户操作系统面板展示期间应用不卡顿startAbility为异步调用多文件分享时自动过滤无效文件无需用户手动筛选十、与其他文件操作的协同10.1 分享在文件操作体系中的位置ShareService 是文件详情页六大操作之一与其他操作共享统一的 ActionToolbar 入口操作actionId处理方式Service分享share隐式 Want 拉起系统面板ShareService复制copy沙箱内文件复制FileOperationService移动move沙箱内文件移动FileOperationService重命名rename修改文件名FileOperationService收藏favoritePreferenceUtil 持久化无独立 Service删除delete沙箱内文件删除FileOperationService10.2 分享前的状态保障分享操作依赖文件详情页加载阶段的准备工作aboutToAppear阶段通过loadFileDetail加载文件信息并校验存在性filePath在 ViewModel 中持久保存作为分享的路径来源分享时直接使用已校验的filePath无需重复加载提示如果用户在文件详情页执行了重命名或移动操作ViewModel 会同步更新filePath确保后续分享操作指向正确的文件路径。总结本文完整记录了 HarmonyExplorer 文件分享功能从初版设计到编译修复再到最终落地的全过程。核心经验在于ArkTS 严格模式下API 选型必须以实际 SDK 导出为准fileUri与fileIo的职责分离、Want类型替代wantConstant.Action、对象字面量的显式类型声明这三点是避免编译错误的关键。最终方案通过隐式 Want 配合 fileUri 模块实现了简洁可靠的单文件与多文件分享能力代码结构清晰异常处理完备。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源HarmonyOS fileUri 模块文档Want 与隐式调用指南ArkTS 严格模式规范Core File Kit 文档Ability Kit 开发指南Stage Model 开发模型ArkUI 状态管理CSDN 鸿蒙社区

相关新闻

上下文省了 857 倍,路由却瞎掉 72%:50 个 Agent Skill 渐进式加载的实测复盘

上下文省了 857 倍,路由却瞎掉 72%:50 个 Agent Skill 渐进式加载的实测复盘

背景:技能越装越多,账单先撑不住 给 Agent 装技能这件事,现在几乎没人再讨论"要不要渐进式加载"了——答案显然是要。但很少有人真的去称一称:省下来的到底是多少,以及省完之后,还剩多少信息够 …

2026/8/2 3:33:46 阅读更多 →
AI重构传统软件:从Excel函数到COBOL代码的范式迁移与应对

AI重构传统软件:从Excel函数到COBOL代码的范式迁移与应对

1. 项目概述:当AI工具链开始“啃食”传统软件的地基最近,一个极具冲击力的标题在技术圈和金融圈引发了广泛讨论:“GPT-5.4杀入Excel,Claude打崩IBM!华尔街恐慌:AI要端掉整个行业”。这并非危言耸听&#xf…

2026/8/2 3:33:46 阅读更多 →
Python爬虫实战:m3u8视频下载与合并完整技术指南

Python爬虫实战:m3u8视频下载与合并完整技术指南

在线视频网站爬虫实战:m3u8视频下载与合并完整指南在日常开发和学习中,我们经常需要从在线视频网站获取视频资源用于分析研究。面对网站采用m3u8流媒体协议的情况,传统下载方式往往无法直接获取完整视频。本文将完整介绍基于Python的在线视频…

2026/8/2 3:33:46 阅读更多 →

最新新闻

《大话文渊慧典》:五

《大话文渊慧典》:五

技术架构(上)——当PDF遇上PyMuPDF,当版面分析遇上PPStructure,一场关于“怎么让电脑看懂竖排繁体”的底层大揭秘 ——大胖老师:“今天这堂课,咱们不讲虚的,直接上硬菜。我要把文渊慧典的技术架…

2026/8/3 0:55:16 阅读更多 →
BetterNCM安装器终极指南:轻松为网易云音乐添加插件管理功能

BetterNCM安装器终极指南:轻松为网易云音乐添加插件管理功能

BetterNCM安装器终极指南:轻松为网易云音乐添加插件管理功能 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer BetterNCM Installer是一款专为网易云音乐PC版设计的插件管理器…

2026/8/3 0:54:15 阅读更多 →
终极Wallpaper Engine创意工坊下载器:三步轻松获取海量动态壁纸

终极Wallpaper Engine创意工坊下载器:三步轻松获取海量动态壁纸

终极Wallpaper Engine创意工坊下载器:三步轻松获取海量动态壁纸 【免费下载链接】Wallpaper_Engine 一个便捷的创意工坊下载器 项目地址: https://gitcode.com/gh_mirrors/wa/Wallpaper_Engine 想要免费获取Wallpaper Engine创意工坊中的精美动态壁纸&#x…

2026/8/3 0:54:15 阅读更多 →
A-29P端口兼容替换A-09/A-06的电平与固件档位匹配

A-29P端口兼容替换A-09/A-06的电平与固件档位匹配

一、"端口兼容"到底兼容了什么A-29P 的规格里有一条容易被一句带过的描述:可直接端口兼容替换 A-09、A-06 模块。对做产品维护的工程师来说,这条比任何算法指标都实际——它意味着老板子不用改版,直接贴新模块。但"端口兼容&q…

2026/8/3 0:53:15 阅读更多 →
A-59U双通道独立拾音的串音抑制与分离度指标解读

A-59U双通道独立拾音的串音抑制与分离度指标解读

一、一个容易被指标表掩盖的问题A-59U 支持双麦双波束模式,两路波束各自输出到独立声道。规格上写得很清楚:双通道、独立定向、互不干扰。但在实际项目里,"互不干扰"这四个字究竟对应多少 dB,规格书往往不给。工程上真正…

2026/8/3 0:53:15 阅读更多 →
学 Simulink—— 航空作动器 BLDC 全数字调速控制仿真

学 Simulink—— 航空作动器 BLDC 全数字调速控制仿真

目录 手把手教你学 Simulink —— 航空作动器 BLDC 全数字调速控制仿真 一、航空作动器为什么用 BLDC?特殊要求是什么? 1.1 与传统工业 BLDC 的差异 1.2 核心设计挑战 二、系统总体架构 三、关键参数(航空作动器典型值) 四、Simulink 建模 Step‑by‑Step Step ①…

2026/8/3 0:52:15 阅读更多 →

日新闻

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。…

2026/8/3 0:00:47 阅读更多 →
[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

PC服务器具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构一、前言:具身智能需要“混合算力闭环系统”传统人工智能依赖云端静态数据集训练,不具备物理交互能力,无法适应真实世界的不确定性。具身智能(Embodied…

2026/8/3 0:00:47 阅读更多 →
[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

前言构建机器人、具身智能这类分布式实时系统,通信底座直接决定整套系统的实时性、容错性、组网能力。分布式领域长期存在 4 类经典通信架构:点对点模式、Broker 中间代理模式、广播模式、以数据为中心(DDS)模式。很多开发者疑惑&…

2026/8/3 0:00:47 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/2 6:34:16 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/2 2:47:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/2 0:23:22 阅读更多 →