🎨 用一次就爱上的图标定制体验:CustomIcons 实战
`@infinilabs/custom-icons` 让“图标即配置”的能力落地:从主题与国际化,到自定义图片与统一风格,既能保证设计一致性,又给予业务足够自由度。把它接入你的管理面板或设置页....
大家好,我是 V 哥。 鸿蒙6的 Agent Framework Kit 是连接应用与小艺智能体生态的核心工具,允许开发者在应用中嵌入智能体入口,实现“应用+智能体”协同服务。以下结合电商、工具类等典型场景,详解集成步骤、代码实战及避坑指南。
联系V哥获取 鸿蒙学习资料
| 关键概念 | 说明 |
|---|---|
| FunctionComponent | 智能体入口UI组件,根据是否设置title自动切换为图标或按钮形态。 |
| AgentController | 控制器,用于检查智能体可用性、监听对话框状态(如打开/关闭)。 |
| agentId | 智能体唯一标识,需从小艺开放平台获取,长度限制1~64字符。 |
环境要求:
module.json5中声明权限 "reqPermissions": [{ "name": "ohos.permission.INTERNET" }]。场景示例:电商App在商品详情页添加“智能客服”入口,用户点击直接唤起智能体咨询商品信息。
import { FunctionComponent, FunctionController } from '@kit.AgentFrameworkKit';
import { common, BusinessError } from '@kit.AbilityKit';
@Entry
@Component
struct ProductDetailPage {
// 替换为实际智能体ID(从小艺开放平台获取)
private agentId: string = 'agentproxy_xxx';
private controller: FunctionController = new FunctionController();
build() {
Column() {
// 商品信息展示...
Text("华为Mate 60 Pro").fontSize(20)
// 智能客服入口(按钮形态)
FunctionComponent({
agentId: this.agentId,
onError: (err: BusinessError) => {
console.error("智能体拉起失败:", err.code, err.message); // 错误处理必填
},
options: {
title: '智能客服', // 设置标题后显示为按钮
queryText: '咨询华为Mate 60 Pro的续航和拍照功能' // 预设用户意图
},
controller: this.controller
})
.margin(20)
}
}
}
title):适合首页导航栏等综合入口。 FunctionComponent({
agentId: this.agentId,
onError: (err) => { /* 处理错误 */ }
// 不设置title,默认显示小艺图标
})
title):适合场景化意图(如“智能生成旅行计划”)。场景示例:工具类App在智能体对话框关闭后刷新页面数据(如智能生成报表后更新UI)。
@Entry
@Component
struct ReportPage {
@State isDialogOpen: boolean = false;
private controller: FunctionController = new FunctionController();
aboutToAppear() {
// 监听对话框打开
this.controller.on('agentDialogOpened', () => {
this.isDialogOpen = true;
console.info("智能体对话框已打开");
});
// 监听对话框关闭(关键:对话框关闭后刷新数据)
this.controller.on('agentDialogClosed', () => {
this.isDialogOpen = false;
this.refreshReportData(); // 自定义数据刷新逻辑
});
}
// 销毁时移除监听
aboutToDisappear() {
this.controller.off('agentDialogOpened');
this.controller.off('agentDialogClosed');
}
build() {
Column() {
if (this.isAgentSupported) { // 需先检查可用性
FunctionComponent({
agentId: this.agentId,
onError: (err) => { /* 错误处理 */ },
controller: this.controller
})
} else {
Text("当前设备不支持智能体功能").fontColor(Color.Red)
}
}
}
}
import { common } from "@kit.AbilityKit";
@Entry
@Component
struct SafeAgentPage {
@State isAgentSupported: boolean = false;
private agentId: string = 'agentproxy_xxx';
async aboutToAppear() {
try {
const context = getContext(this) as common.UIAbilityContext;
// 异步检查智能体是否可用
this.isAgentSupported = await FunctionController.isAgentSupport(context, this.agentId);
} catch (err) {
console.error("检查支持状态失败:", err);
}
}
build() {
Column() {
if (this.isAgentSupported) {
FunctionComponent({
agentId: this.agentId,
onError: (err) => { /* 处理错误 */ }
})
} else {
Button("下载智能体支持模块")
.onClick(() => { /* 引导用户升级系统 */ })
}
}
}
}
| 问题场景 | 解决方案 |
|---|---|
| agentId无效或设备不支持 | 使用isAgentSupport()预检查,降级显示提示或引导用户升级。 |
| 智能体拉起无响应 | 检查网络权限、确认小艺版本更新,错误回调中输出具体code。 |
| 界面卡顿 | 避免在主线程执行智能体相关操作,耗时逻辑放入TaskPool。 |
电商场景:
工具场景:
queryText: "规划北京3日游")。通过以上步骤,可快速在鸿蒙6应用中集成智能体功能,提升用户交互体验。