第16篇|小艺意图配置:insight_intent.json 如何绑定执行器

这篇讲智能化能力如何进入项目,同时处理本地配置、请求结构、解析兜底和用户可见反馈。本篇主题是「小艺意图配置:insight_intent.json 如何绑定执行器」,目标是把源码、效果和工程质量放到同一篇文章里讲透。

本文是 21 天「智能相机开发实战」训练营第 4 天的第 3 篇。

这篇解决什么问题

  • 读懂本篇能力在「双镜记忆相机」中的用户价值。
  • 从源码中定位关键入口,而不是只停留在概念介绍。
  • 把页面效果、状态流转和失败态串成一个可复现的小闭环。

代码来自哪里

  • entry/src/main/ets/insightintents/NearbyAgentLocationIntent.ets
  • entry/src/main/resources/base/profile/insight_intent.json

本篇优先阅读 entry/src/main/ets/insightintents/NearbyAgentLocationIntent.ets,下面的片段保留项目中的真实命名,方便你在 DevEco Studio 中直接搜索。

ts 复制代码
import { insightIntent, InsightIntentExecutor } from '@kit.AbilityKit';

import { AgentLocationService } from '../services/AgentLocationService';

const INTENT_GET_LOCATION = 'GetLocation';
const INTENT_GET_NEARBY_AGENT_LOCATION = 'GetNearbyAgentLocation';

export default class NearbyAgentLocationIntent extends InsightIntentExecutor {
  async onExecuteInUIAbilityBackgroundMode(intentName: string, intentParam: Record<string, Object>):
    Promise<insightIntent.ExecuteResult> {
    if (intentName !== INTENT_GET_LOCATION && intentName !== INTENT_GET_NEARBY_AGENT_LOCATION && intentName !== 'getLocation') {
      return {
        code: -1,
        result: {
          success: false,
          resultDesc: `Unknown end plugin tool: ${intentName}`
        }
      };
    }

    const locationResult = await AgentLocationService.getCurrentLocation();
    return {
      code: 0,
      result: {
        success: locationResult.success,
        address: locationResult.amapLocation,
        resultDesc: locationResult.resultDesc,
        latitude: locationResult.latitude,
        longitude: locationResult.longitude,
        wgs84Latitude: locationResult.wgs84Latitude,
        wgs84Longitude: locationResult.wgs84Longitude,
        amapLatitude: locationResult.amapLatitude,
        amapLongitude: locationResult.amapLongitude,
        amapLocation: locationResult.amapLocation,
        coordinateSystem: locationResult.coordinateSystem,
        accuracyMeters: locationResult.accuracyMeters,
        timeStamp: locationResult.timeStamp,
        source: locationResult.source,

源码拆解

  • 先看入口变量或函数:它决定能力从哪个页面、哪个服务或哪个系统配置开始。
  • 再看状态字段:页面上的按钮、提示、加载态通常不是临时文案,而是这些状态的投影。
  • 最后看结果写回:拍摄、定位、AI、同步或分享能力最终都要回到记录模型、页面刷新或用户反馈。

跑出来是什么效果

结合页面效果,本文重点观察:

  • 配置截图
  • 意图到 Ability 的链路图

**流程串联:**用户选择照片 → 组装请求 → 解析模型结果 → 写回详情页

从页面效果看,关键不是单点能力,而是让用户动作、源码状态和结果反馈保持一致。

实操步骤

  1. 在 DevEco Studio 打开项目,先搜索本文列出的主文件。
  2. 顺着源码片段中的变量或函数名继续查找调用点。
  3. 在真机上运行到对应页面,观察截图中的成功态是否与源码状态一致。
  4. 主动制造一次失败态,例如拒绝权限、断网、无数据或能力不支持。
  5. 把成功态、失败态、源码片段和页面截图串成完整实操闭环。

工程质量点

  • API Key 只保存在本地用户侧,文章中不出现真实密钥。
  • 模型输出按结构化结果解析,异常文本进入兜底路径。
  • 生成中、成功、失败都要有独立文案,用户能判断下一步。
  • 源码截图只截关键函数,不截整屏代码,方便读者跟着定位。
  • 效果图和流程路径一一对应,避免只讲原理却看不到用户结果。

质量分自评

维度 分值 本篇检查点
源码准确度 28/30 代码片段来自项目文件,变量名和函数名保持原样。
效果可见性 23/25 页面效果与流程路径能说明从点击到结果的路径。
实操完整度 20/20 读者能按文章复现一个最小操作闭环。
工程质量 13/15 覆盖失败态、状态边界或隐私边界中的关键点。
表达清晰度 10/10 标题、截图说明和源码说明互相对齐。
合计 94/100 达到训练营发布质量线。

今日作业

  1. 使用一张测试照片触发分析或生成,保存成功和失败两种截图。
  2. 把模型返回结果复制一份,验证解析函数的兜底路径。
  3. 检查文章中没有出现真实 Key 或敏感地址。

完成作业后,下一篇继续沿着同一条源码路径往下走:先做出效果,再把工程边界讲清楚。

相关推荐
贾伟康4 小时前
【HarmonyOS 7新能力|026】Agent Framework Kit工程封装:把接入逻辑放进可维护的分层结构
agent·harmonyos·arkts·a2a·harmonyos 7
贾伟康4 小时前
【HarmonyOS 7新能力|025】Core File Kit mmap入门实战:从能力边界到最小可运行链路
harmonyos·arkts·文件读写·mmap·harmonyos 7
贾伟康7 小时前
【HarmonyOS 7新能力|028】Core Vision Kit工程封装:把接入逻辑放进可维护的分层结构
计算机视觉·harmonyos·arkts·端侧ai·harmonyos 7
马剑威(威哥爱编程)9 小时前
【共创稿事节】HarmonyOS 7 互动卡片实战:摇一摇触发静态转动态,前景元素出框
华为·harmonyos
贾伟康9 小时前
【HarmonyOS 7新能力|029】3DGS工程封装:把接入逻辑放进可维护的分层结构
harmonyos·arkts·三维重建·3dgs·harmonyos 7
马剑威(威哥爱编程)9 小时前
【共创稿事节】HarmonyOS 7 闪控窗实战:标准悬浮窗、侧边栏暂存与闪控球一键切换
华为·harmonyos
贾伟康10 小时前
【HarmonyOS 7新能力|019】平行视界入门实战:从能力边界到最小可运行链路
harmonyos·arkts·arkui·harmonyos 7·平行视界
技术任我行XTing11 小时前
【DFX系列】Flutter 鸿蒙应用外接纹理介绍及问题定位
flutter·harmonyos
三翼鸟数字化技术团队11 小时前
WiFi-DensePose × OpenHarmony 智慧家居融合
harmonyos
HarmonyOS_SDK11 小时前
AI 赋能 Push Kit 场景化消息开发,高效完成鸿蒙应用推送能力接入
harmonyos