蓝牙HFP三方通话AT命令实战:AT+CHLD与AT+CHUP深度解析
1. 项目概述深入蓝牙HFP的三方通话世界如果你在开发蓝牙音频设备特别是车载蓝牙、蓝牙耳机或智能音箱并且希望实现“三方通话”这个听起来有点高级的功能那你肯定绕不开HFP协议中的几个核心AT命令。今天我们就来彻底拆解一下“蓝牙HFP三方通话相关命令”这不仅仅是几个指令的罗列更是理解蓝牙免提设备如何管理复杂通话状态的关键。简单来说三方通话允许一个蓝牙免提设备HF比如你的车载蓝牙同时处理两条来自手机AG比如你的智能手机的语音链路一条是当前活跃的通话另一条是处于保持Hold状态的等待通话。用户可以在两条链路间切换、合并或挂断其中一方。实现这一切的“遥控器”就是HF设备通过串口或RFCOMM信道发送给AG的AT命令。其中ATCHLD和ATCHUP是当之无愧的主角。理解它们你就能让设备从只能接打电话升级为具备基本呼叫中心管理能力的智能终端。无论你是嵌入式工程师、蓝牙应用开发者还是对此感兴趣的技术爱好者掌握这些命令的底层逻辑和实战用法都能让你在调试和开发中事半功倍。2. HFP协议与三方通话基础原理在深入命令之前我们必须先搭建起正确的认知框架。HFPHands-Free Profile定义了音频网关AG通常是手机和免提设备HF如车载套件、耳机之间控制和传输音频的协议。而“三方通话”更准确的叫法是“多方通话管理”其核心在于AG侧的电话网络能力如呼叫等待、三方会议HFP协议只是提供了一套让HF设备可以远程触发这些能力的标准化指令集。2.1 通话状态模型理解一切的前提AG手机维护着当前所有通话的状态。在HFP的语境下最重要的几个状态是活跃Active正在通话中音频通道建立。保持Held通话被暂停对方听不到HF这边的声音HF也听不到对方但通话连接并未断开。拨号中/来电中Dialing/Incoming正在发起或接收新的呼叫。等待Waiting一个新的来电到达而当前已有一个活跃或保持的通话。三方通话的场景通常始于一个“活跃”通话此时第二个来电进入成为“等待”状态。HF设备需要决定如何处理这个新来电是拒绝它、保持当前通话并接听新来电还是合并两者ATCHLD命令就是用来做这些决策的。2.2 AT命令通道HF控制AG的桥梁HF与AG之间除了音频流还有一个至关重要的“控制通道”。在经典蓝牙BR/EDR中这通常是一个基于RFCOMM的串行端口仿真连接。HF通过这个通道向AG发送ASCII格式的AT命令AG执行后回复结果码如OK、ERROR或带有数据的响应。所有与呼叫控制、网络状态查询、音量调节相关的操作都通过这个通道完成。因此在你的嵌入式代码中实现一个稳定、能正确解析响应状态的AT命令收发引擎是第一步也是基础中的基础。注意很多开发者在调试时只关注发送命令却忽略了完整、健壮地处理AG返回的响应和主动上报的指示如CIEV、CLCC。这会导致设备状态与手机实际状态不同步是三方通话功能紊乱的主要根源。3. 核心命令深度解析ATCHLDATCHLD是“Call Hold and Multiparty handling”的缩写它是三方通话管理的总开关。这个命令的强大之处在于它的参数不同的参数值对应了完全不同的通话操作逻辑。3.1 命令格式与参数详解基本格式为ATCHLDn其中n的取值范围及其含义直接体现了HF设备支持的多方通话能力等级。HFP协议定义了多个版本的CHLD支持我们需要通过ATBRSF蓝牙支持特性查询来协商确定双方共同支持哪些操作。下面是一个核心参数功能对照表这在开发时是需要常备在侧的参数值 (n)名称功能描述典型应用场景0Release all held calls释放所有被保持的通话。你想挂断那个在等待的通话只保留当前通话。1Release all active calls and accept the other (held or waiting) call释放所有活跃通话并接听其他保持或等待中的通话。你在通话A中来电B在等待。发送CHLD1会挂断A接听B。2Place all active calls on hold and accept the other (held or waiting) call保持所有活跃通话并接听其他保持或等待中的通话。你在通话A中来电B在等待。发送CHLD2会保持A接听B此时A处于保持状态B活跃。3Add a held call to the conversation将一条被保持的通话加入到当前会话中建立多方会议。你已保持通话A并接听了B活跃。发送CHLD3会把A从保持状态唤醒与B合并成一个三方会议。4Connect the two calls and disconnect the subscriber from both calls连接两条通话让双方直接通话并断开HF与这两条通话的连接。隐私转移。你在和A通话B来电你想让A和B直接交谈而自己退出。此功能需AG支持。1xRelease the call with specified index释放指定索引x的通话。索引来自CLCC查询。精确挂断多方会议中的某一方。参数选择的底层逻辑为什么是0、1、2、3…这其实是协议设计上的一种“操作码”映射。0通常代表“释放”1和2都涉及“切换”但1更激进释放当前2更保守保持当前。3的“加入”操作是一个独立语义。理解每个数字背后的动作释放、接听、保持、加入和作用对象活跃的、保持的、等待的比死记硬背更重要。3.2 实战中的状态机与CLCC查询单独发送ATCHLD是鲁莽的。一个稳健的HF设备在决定发送哪个n值之前必须先查询AG当前的通话列表状态。这就需要用到ATCLCCList Current Calls命令。AG对ATCLCC的回复格式类似CLCC: 1,1,4,0,“8613800138000”,129 CLCC: 2,0,4,0,“8613900139000”,129 OK每一行代表一条当前通话。我们需要解析几个关键字段以第一个为例索引 (1): 通话的唯一标识用于CHLD1x操作。方向 (1): 1主叫MO0被叫MT。状态 (4):这是核心4活跃Active0保持Held2拨号中3来电中5等待Waiting。模式 (0): 0语音1数据…号码对方号码。类型 (129): 号码类型国际、本地等。正确的操作流程应该是用户按下设备上的“接听第二个来电”按钮。HF设备立即发送ATCLCC查询当前状态。解析响应发现有一条状态为4活跃的通话A和一条状态为5等待的通话B。HF设备根据设计逻辑例如用户设置是“保持当前接听新来电”决定发送ATCHLD2。发送ATCHLD2。等待AG回复OK并监听后续的CIEV指示器事件如callheld状态变化和新的CLCC上报以更新本地UI状态例如图标从“一个通话一个等待”变为“两个通话一个活跃一个保持”。实操心得永远不要假设设备本地的状态记忆是准确的。手机是状态的真实持有者。任何UI操作触发通话控制前先查CLCC发送CHLD后也要等待AG的CLCC主动上报或再次查询来确认状态变更。这是避免状态不同步的黄金法则。4. 辅助命令与事件处理ATCHUP及其他虽然ATCHLD是主力但其他命令和事件同样不可或缺它们共同构成了完整的通话控制闭环。4.1 ATCHUP最直接的挂断ATCHUPCall Hang Up命令非常简单ATCHUP。它的作用是挂断当前所有的通话。这是一个“核按钮”无论当前是单方通话、多方会议还是有通话被保持CHUP都会结束所有通话连接。何时用CHLD何时用CHUPATCHLD用于精细化的通话管理。例如只想挂断被保持的那一个CHLD0或在三方会议中只想挂断其中一方CHLD1x。ATCHUP用于“全部挂断”的场景。例如通话结束时用户直接按了红色的“挂断”键或者设备需要强制清理所有通话状态。在实现上当用户短按挂断键时发送ATCHUP是最安全、最符合直觉的做法。而CHLD的各个参数则应该分配给设备上更专门的软键或语音命令如“保持当前通话”、“接听新来电”、“合并通话”等。4.2 关键事件指示器CIEV 与 BVRAAG不会只在收到命令时才回应。它会通过CIEVIndicator Event Update主动向HF上报状态变化。对于三方通话最重要的指示器是callheld。callheld状态值0: 没有通话被保持。1: 有一个通话被保持并且有另一个活跃通话即“保持并接听”状态。2: 有一个通话被保持但没有其他活跃通话这个状态较少见通常由网络或AG侧特定操作引起。当HF发送ATCHLD2后AG除了回复OK稍后一定会发送一条类似CIEV: callheld,1的指示。HF设备必须监听并解析此事件从而更新设备上“通话保持”指示灯或图标的状态。另一个相关命令是ATBVRAVoice Recognition Activation。在部分三方通话场景中用户可能希望通过语音命令如“接听第二个来电”来触发操作。这需要先通过ATBVRA1启动AG端的语音识别识别到相应指令后AG再执行相应操作。不过更常见的实现是HF设备本地的语音识别模块直接解析指令然后由HF发送对应的ATCHLD命令。4.3 错误处理与兼容性考量不是每次ATCHLD都会成功。AG可能回复ERROR。常见原因包括参数不支持你发送了ATCHLD3但对方的AG或手机网络不支持三方会议功能。这需要在特性交换ATBRSF阶段就检查好。状态无效当前通话状态不允许执行该操作。例如只有一条活跃通话时发送ATCHLD0释放所有保持的通话就是无效的。网络拒绝移动网络侧拒绝了该操作如呼叫等待业务未开通。健壮性设计建议在设备初始化并与AG配对后第一时间通过ATBRSF交换特性并保存AG支持的CHLD参数位图。在UI上根据BRSF的结果和实时CLCC查询的状态动态禁用或启用相应的功能按钮。例如如果BRSF显示不支持CHLD3那么“合并通话”按钮就应该灰色显示。每次发送ATCHLD后必须做好接收ERROR的准备并在UI上给用户一个明确的提示如“操作失败网络不支持”而不是让界面卡死或状态错乱。5. 嵌入式开发实战从代码到调试理论最终要落地到代码。我们以一块常见的嵌入式MCU如ESP32、STM32连接蓝牙模块如BK3266、杰理方案或集成蓝牙协议栈为例勾勒出实现三方通话控制的关键代码框架和调试思路。5.1 状态机设计与代码框架你的设备需要一个清晰的通话控制状态机。这个状态机的输入是用户操作按键和AG上报的事件CLCCCIEV输出是发送相应的AT命令。// 伪代码示例一个简化的状态机处理片段 typedef enum { CALL_STATE_IDLE, CALL_STATE_SINGLE_ACTIVE, CALL_STATE_ACTIVE_AND_WAITING, CALL_STATE_ACTIVE_AND_HELD, CALL_STATE_MULTIPARTY } hfp_call_state_t; void handle_user_hold_call(void) { // 1. 先查询当前状态 send_at_command(ATCLCC\r\n); // 假设在回调中解析到状态为 CALL_STATE_SINGLE_ACTIVE // 2. 根据设计逻辑执行保持操作。对于单个活跃通话保持它实际上需要先有另一个通话。 // 通常“保持”按钮是在有第二个来电等待时才出现。这里假设是切换保持/活跃。 // 更常见的操作是“保持当前并接听新来电”这由另一个按钮触发。 // 此处演示如果有等待来电则执行 CHLD2 if (g_current_state CALL_STATE_ACTIVE_AND_WAITING) { send_at_command(ATCHLD2\r\n); // 保持当前接听等待的 } } // 解析 ATCLCC 响应 void parse_clcc_response(char *response) { // 解析多行统计活跃(4)、保持(0)、等待(5)的通话数量 int active_cnt 0, held_cnt 0, waiting_cnt 0; // ... 解析逻辑 ... // 更新全局状态机 if (active_cnt 1 waiting_cnt 1) { g_current_state CALL_STATE_ACTIVE_AND_WAITING; ui_show_waiting_call(); // 更新UI显示等待图标和接听/拒绝选项 } else if (active_cnt 1 held_cnt 1) { g_current_state CALL_STATE_ACTIVE_AND_HELD; ui_show_held_call(); // 更新UI显示保持图标和合并/切换选项 } else if (active_cnt 1) { g_current_state CALL_STATE_MULTIPARTY; ui_show_multiparty(); // 更新UI显示会议图标和挂断某一方的选项 } // ... 其他状态 ... }5.2 AT命令收发引擎实现要点缓冲区与解析必须有一个环形缓冲区或足够大的缓冲区来接收AG返回的数据。AT响应可能不是一次性到达需要做好数据拼接和断帧处理。超时与重试为每个发送的AT命令设置合理的超时如3秒。超时后不能简单重试而应检查底层链路RFCOMM是否还连接并进入错误处理流程。响应解析器编写一个状态机式的解析器能够区分OK、ERROR、CLCC:、CIEV:等不同行并提取关键参数。正则表达式在资源受限的嵌入式端可能负担较重可以用sscanf或手写字符串解析函数。异步事件处理CIEV和CLCC作为事件上报时是异步的可能在任何时候到来。你的解析器需要能随时中断当前“命令-响应”会话处理这些事件。5.3 调试技巧与常见问题排查调试蓝牙HFP尤其是三方通话这种多状态交互的功能逻辑分析仪和抓包工具是你的好朋友。抓包分析空中包使用诸如Frontline、Ellisys等蓝牙协议分析仪捕获HCI、RFCOMM和AT命令层面的数据。这是终极调试手段可以清晰地看到HF发送了什么AG回复了什么以及异步事件何时产生。你可以验证ATCHLD2发送后是否跟随着CIEV: callheld,1的事件。串口日志在你的HF设备代码中将所有收发的AT命令和解析后的状态通过一个额外的调试串口打印出来。确保日志包含时间戳。对比操作逻辑和日志输出能快速定位是命令没发出去还是响应没解析对。手机兼容性测试这是最大的“坑”。不同品牌、不同系统版本iOS vs Android 甚至不同Android厂商的AG对HFP协议的支持度和细节处理可能有差异。必须用多款主流手机进行测试。常见问题1发送ATCHLD2后手机UI显示已接听新来电但callheld事件迟迟不来。排查检查ATBRSF阶段手机是否报告支持callheld指示器。可能某些手机对此事件上报不积极。常见问题2三方会议中发送ATCHLD10想挂断索引为0的通话但整个会议都结束了。排查首先确认ATCLCC查询到的通话索引是否正确。其次确认手机是否支持按索引释放CHLD1x功能。很多手机仅支持基础的多方处理。常见问题3设备状态如LED灯和手机实际状态不一致。排查这几乎总是因为HF设备没有正确处理AG的异步事件。确保你的代码在任何时候都能处理CLCC和CIEV上报并用它们作为更新本地状态的唯一真理源而不是依赖内部计时器或假设。6. 进阶话题与未来演进掌握了基础命令和实现后我们可以看看更广阔的应用场景和技术趋势。6.1 与智能手机深度集成现代智能手机的蓝牙通话接口远不止基础的HFP。例如苹果的MFiMade for iPhone对于iPhone想要获得最稳定、功能最全的体验包括准确的来电显示、通讯录同步、Siri唤醒等可能需要加入MFi计划并使用特定的认证芯片如CSR867x系列配合苹果的认证固件。在MFi框架下通话控制可能通过更底层的私有协议或增强的AT命令集完成。Android的蓝牙HAL层与APIs对于Android如果设备是内置在汽车中车载信息娱乐系统可以通过Android Auto或直接集成蓝牙堆栈使用Android提供的更高层API如BluetoothHeadset进行控制这比直接操作AT命令更稳定但耦合度也更高。6.2 蓝牙双模与LE Audio的潜在影响目前HFP和多方通话主要运行在经典蓝牙BR/EDR的SCO同步面向连接链路上传输语音。随着蓝牙5.2和LE Audio的普及新的LC3编解码器和基于ISOC同步信道的音频传输方式将带来更高的音质和更低的功耗。未来的“三方通话”协议栈可能会在LE Audio的框架下重新定义使用新的控制通道和更高效的音频多路复用技术。但可以预见在相当长的一段过渡期内经典HFP与LE Audio将会共存而ATCHLD这类逻辑控制命令的语义很可能被保留或平滑迁移到新的控制协议中。6.3 设计一个用户友好的三方通话界面最后从产品角度思考。如何让用户无需阅读说明书就能直观地使用三方通话清晰的视觉反馈在设备的屏幕或LED指示灯上明确区分“活跃通话”、“保持通话”、“等待来电”三种状态。使用不同的图标、颜色或位置。符合直觉的物理按键常见的车载蓝牙设计是一个“电话”键接听/挂断/重拨一个“语音”键以及一个专门的“交换”Swap键。这个“交换”键通常就映射为ATCHLD2在活跃和保持通话间切换。对于合并通话可能需要长按“交换”键或通过语音命令触发。语音提示在状态变化时用TTS语音播报“第二个来电请按交换键接听”或“通话已保持”这对驾驶场景尤其重要。容错与引导当用户在不恰当的状态下按下某个功能键例如只有一个通话时按“合并”设备应给出友好的语音或视觉提示如“当前无法合并通话”而不是无声地失败或发送一个错误的AT命令。

相关新闻

Qwen3.8-Max、Kimi K3都到TB级了,普通电脑该跑什么模型?

Qwen3.8-Max、Kimi K3都到TB级了,普通电脑该跑什么模型?

先说结论:这些完整旗舰模型并非在任何条件下都“不能运行”,但对绝大多数个人电脑来说,它们已经不具备实用部署价值。最近,Qwen3.8-Max和Kimi K3分别把旗舰模型的总参数规模推到了2.4T和2.8T。与此同时,DeepSeek V4 Fl…

2026/8/9 12:11:07 阅读更多 →
网络拥塞控制新视角:IP ToS字段与TCP ECN/CWR标记深度解析

网络拥塞控制新视角:IP ToS字段与TCP ECN/CWR标记深度解析

1. 项目概述:从一次网络拥塞排查说起最近在排查一个线上服务的间歇性延迟抖动问题时,我习惯性地抓包分析。在密密麻麻的TCP流中,除了常规的序列号、确认号,我的目光被几个不常关注的标记位吸引了:IP头里的Tos字段似乎有…

2026/8/8 16:02:16 阅读更多 →
CentOS安装iftop全攻略:EPEL仓库配置、离线安装与实时网络流量监控实战

CentOS安装iftop全攻略:EPEL仓库配置、离线安装与实时网络流量监控实战

1. 项目概述与核心价值在Linux服务器的日常运维和性能调优工作中,网络流量监控是诊断网络瓶颈、排查异常连接、评估服务负载的基石。想象一下,你的服务器突然响应变慢,带宽告警邮件纷至沓来,你第一时间需要知道的是:到…

2026/8/9 18:26:55 阅读更多 →

最新新闻

Python贪吃蛇游戏开发实战:从零掌握Pygame与游戏循环

Python贪吃蛇游戏开发实战:从零掌握Pygame与游戏循环

1. 项目概述:为什么用Python写贪吃蛇是绝佳的入门项目如果你刚开始学Python,或者已经学了一阵子语法,但总觉得那些变量、循环、函数离“做出一个东西”还很遥远,那么我强烈建议你动手写一个贪吃蛇游戏。这不是一个简单的练习&…

2026/8/10 5:14:38 阅读更多 →
AI音频水印技术解析:从原理到Suno级工程实践

AI音频水印技术解析:从原理到Suno级工程实践

在实际 AI 生成内容(AIGC)快速发展的背景下,如何对 AI 生成的作品进行有效标识、追踪和合规管理,正成为一个日益紧迫的技术与法律问题。Suno 作为一家专注于 AI 音乐生成的平台,其探索通过“AI 音乐水印”技术来实现合…

2026/8/10 5:14:38 阅读更多 →
云服务计费模式选择与成本优化实战指南

云服务计费模式选择与成本优化实战指南

1. 云服务计费模式全景解析作为阿里云渠道商技术顾问,我每天至少要处理20客户关于计费方案的咨询。2023年阿里云官方数据显示,超过60%的企业客户因选错计费模式导致云资源浪费。本文将结合我经手的300真实企业案例,拆解四种核心计费模式的选择…

2026/8/10 5:14:38 阅读更多 →
UnityLive2DExtractor:从Unity中无损提取Live2D模型资源的完整指南

UnityLive2DExtractor:从Unity中无损提取Live2D模型资源的完整指南

1. 项目概述:为什么我们需要一个专门的Live2D提取工具?如果你在Unity项目里用过Live2D,尤其是从AssetBundle里加载过模型,那你大概率遇到过这个头疼的问题:辛辛苦苦打包好的Live2D资源,想拿出来复用、二次编…

2026/8/10 5:14:38 阅读更多 →
AI编程时代:从工具依赖到以人为本的开发者能力重塑

AI编程时代:从工具依赖到以人为本的开发者能力重塑

1. 从“AI写代码”到“人驾驭AI”:一个老码农的深度观察最近和几个圈内朋友聊天,话题总绕不开AI编程。有人兴奋地展示用ChatGPT几分钟生成一个功能模块,也有人抱怨生成的代码漏洞百出,改起来比手写还累。这让我想起十多年前&#…

2026/8/10 5:14:38 阅读更多 →
OpenUtau:免费开源虚拟歌手制作平台,让音乐创作触手可及

OpenUtau:免费开源虚拟歌手制作平台,让音乐创作触手可及

OpenUtau:免费开源虚拟歌手制作平台,让音乐创作触手可及 【免费下载链接】OpenUtau Open singing synthesis platform / Open source UTAU successor 项目地址: https://gitcode.com/gh_mirrors/op/OpenUtau OpenUtau是一款专为UTAU社区设计的免费…

2026/8/10 5:13:37 阅读更多 →

日新闻

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南 【免费下载链接】graphql-css A blazing fast CSS-in-GQL™ library. 项目地址: https://gitcode.com/gh_mirrors/gr/graphql-css GraphQL-CSS是一个基于GraphQL的CSS-in-GQL™库&#xff0…

2026/8/10 0:00:02 阅读更多 →
告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南 【免费下载链接】kiss-translator A simple, open source bilingual translation extension & Greasemonkey script (一个简约、开源的 双语对照翻译扩展 & 油猴脚本) 项目地址: https://gitcode.com/…

2026/8/10 0:00:02 阅读更多 →
BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案 【免费下载链接】BepInEx.ConfigurationManager Plugin configuration manager for BepInEx 项目地址: https://gitcode.com/gh_mirrors/be/BepInEx.ConfigurationManager 你是否曾经因为游戏插件的复杂…

2026/8/10 0:00:02 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/10 1:05:29 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/10 1:05:29 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/10 1:05:29 阅读更多 →

月新闻

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

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

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

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

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

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

2026/8/10 1:05:29 阅读更多 →
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/9 17:05:02 阅读更多 →