hadss_intents

介绍

为 Flutter 提供“意图框架”能力,当前支持手机设备上的意图框架能力。该库封装了鸿蒙原生能力,开发者可通过简洁接口在Flutter中实现原生的意图框架能力。

提供鸿蒙意图框架能力flutter插件库,目前库提供的api能力如下:

  1. 共享已执行或预期的InsightIntent
  2. 删除意图名称记录
  3. 删除InsightIntent实体
  4. 获取Service Open ID

API

Intents

鸿蒙意图框架能力

方法 类型 说明
shareIntent shareIntent(List 共享已执行或预期的InsightIntent。
deleteIntent deleteIntent(String intentName, {List 如果设置了identifiers参数,则删除intent名称下的identifiers对应的记录。否则,删除意图名称下的所有记录
deleteEntity deleteEntity(String entityName, List 按实体名称下的实体ID删除InsightIntent实体。
getSide getSide(bool renew):Future 获取Service Open ID。

InsightIntent

方法 类型 说明
toString toString():String 将对象转换为String类型。

InsightIntent属性

InsightIntent ,包括意图名称、意图版本号、标识、Action信息、Entity信息。

名称 类型 可选 说明
intentName String 表示意图名称,例如:'PlayMusic'。
intentVersion String 表示意图版本,当前为初始版本'1.0'。
identifier String 表示意图的标识符,开发者按照自身业务需要生成,作为单条共享记录的唯一标识符。该字段的生成方式可参考UUID生成方式,或基于时间戳生成随机字符串。例如:'52dac3b0-6520-4974-81e5-25f0879449b5'。
intentActionInfo Map<String, Object> 表示意图的执行信息,例如:已执行或预测将要执行意图的时间。
intentEntityInfo Map<String, Object> 表示意图的实体信息,包含行为和事件。

工程目录

├─intents
│  ├─lib/src/bean                        // flutter代码实现        
│  └─ohos/src/main/ets/components/plugin // harmony代码实现

依赖

本示例依赖@ohos/hvigor-ohos-plugin,且最低版本为5.17.2。 使用DevEco Studio版本大于本示例推荐版本,请根据 DevEco Studio 提示更新 hvigor 插件版本。 SID获取需联网、登录华为账号并同意小艺建议的用户协议和隐私政策。

意图框架配置

意图前置配置: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/intents-access-flow 开发者需要参照上述官方文档中的Intents Kit接入流程 进行操作:

  1. 选择特性确定意图
  2. 调试白名单申请
  3. 端侧意图调用调试工具申请
  4. 意图声明文件中注册意图
  5. 开发实现意图调用/意图共享
  6. 端到端验证特性
  7. 应用市场上架软件包(应用/元服务)
  8. 意图框架注册

本库涉及开发接入的主要工作在实现4、5两个步骤:

  • 意图声明文件中注册意图(意图回调注册-鸿蒙实现)
  • 实现意图调用(鸿蒙端实现)/意图共享(Flutter实现)

其他工作请开发者自行申请完成

1.意图声明文件中注册意图-鸿蒙端处理:

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/intents-habit-rec-access-programme#section12621163216260 以歌曲续听推荐特性为例,首先要注册播放歌曲意图(PlayMusic),其他意图见各垂域意图Schema。开发者需要编辑对应的意图配置PROJECT_HOME/entry/src/main/resources/base/profile/insight_intent.json文件,实现意图注册。

{
  // 应用支持的意图列表
  // 必须声明应用支持插件包含的必选意图,应用上架时会进行校验
  "insightIntents": [
    {
      // 意图名称
      // 名称应当遵循意图框架规范,当前仅支持预置垂域意图,不允许自定义
      // 应用内意图名称唯一,不允许出现相同的名称定义
      "intentName": "PlayMusic",
      // 意图所属的垂域
      "domain": "MusicDomain",
      // 意图版本号
      // 插件引用意图时会校验该版本号,只有和插件定义的版本号一致才能正常调用
      "intentVersion": "1.0.1",
      // 意图调用逻辑入口
      // 根据意图调用文件实际路径和实际名称进行填写,此处文件仅做示意
      "srcEntry": "./ets/entryability/InsightIntentExecutorImpl.ets",
      "uiAbility": {
        // 意图所在module、ability,以及代码相对路径入口
        "ability": "EntryAbility",
        // UIAbility支持前后台两种执行模式
        "executeMode": [
          "background",
          "foreground"
        ]
      }
    }
  ]
}

2.1 实现意图调用(鸿蒙端实现)

function shareIntent(call: MethodCall, result: MethodResult) {
  let data = JSON.parse(call.argument('shareList')) as insightIntent.InsightIntent[]
  insightIntent.shareIntent(getContext(), data,
    (err?: BusinessError) => {
      if (err) {
        Log.e(TAG, `shareIntent error message: ${err?.message} code: ${err?.code}`)
        result.error(err.name + " code : " + err.code, err.message, err.stack)
      } else {
        result.success(null)
      }
    }
  )
}

2.2 意图共享(Flutter实现)

 // 分享意图信息
  void doPlayMusic() {
    List<InsightIntent> list = [];
    InsightIntent intent = InsightIntent();
    intent.identifier = "52dac3b0-6520-4974-81e5-25f0879449b5";
    intent.intentVersion = "1.0";
    intent.intentName = "PlayMusic";
    intent.intentActionInfo = {
      "actionMode": "EXECUTED",
      "executedTimeSlots": {
        "executedStartTime": 1747328400000,
        "executedEndTime": 1747328452000
      },
      "currentPercentage": 50
    };
    intent.intentEntityInfo = {
      "entityName": "Music",
      "entityId": "C10194368",
      "entityGroupId": "C10194321312",
      "displayName": "flutter测试歌曲",
      "description": "NA",
      "logoURL":
          "https://www-file.huawei.com/-/media/corporate/images/home/logo/huawei_logo.png",
      "keywords": ["华为音乐", "化妆"],
      "rankingHint": 99,
      "expirationTime": 1747328452000,
      "metadataModificationTime": 1747328452000,
      "activityType": ["1", "2", "3"],
      "artist": ["测试歌手1", "测试歌手2"],
      "lyricist": ["测试词作者1", "测试词作者2"],
      "composer": ["测试曲作者1", "测试曲作者2"],
      "albumName": "测试专辑",
      "duration": 244000,
      "playCount": 100000,
      "musicalGenre": ["流行", "华语", "金曲", "00后"],
      "isPublicData": false
    };
    list.add(intent);
    _intentsPlugin.shareIntent(list).then(
        (value) => {
              setState(() {
                printString = 'doPlayMusic : success';
              })
            },
        onError: (err) => {
              setState(() {
                printString = 'doPlayMusic : error $err';
              })
            });
  }

约束与限制

本示例仅支持标准系统上运行,支持设备:Phone | Tablet。

地区限制:仅支持中国境内(不包含中国香港、中国澳门、中国台湾)提供服务。

操作系统限制:HarmonyOS 5.0及以上。

DevEco Studio版本:DevEco Studio 5.0.0 Release及以上。

HarmonyOS SDK版本:HarmonyOS 5.0.0 Release及以上。

OpenHarmony SDK: >= API 12.

flutter sdk 版本要求:>= 3.7.12

使用过程中发现任何问题都可以提 Issue

同时,也非常欢迎您提交 PR

开源协议

本项目基于Apache License 2.0,请自由地享受和参与开源。

Libraries

hadss_intents