hadss_intents 1.0.0-rc.0
hadss_intents: ^1.0.0-rc.0 copied to clipboard
A plug-in library for intents.
hadss_intents #
介绍 #
为 Flutter 提供“意图框架”能力,当前支持手机设备上的意图框架能力。该库封装了鸿蒙原生能力,开发者可通过简洁接口在Flutter中实现原生的意图框架能力。
提供鸿蒙意图框架能力flutter插件库,目前库提供的api能力如下:
- 共享已执行或预期的InsightIntent
- 删除意图名称记录
- 删除InsightIntent实体
- 获取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接入流程 进行操作:
- 选择特性确定意图
- 调试白名单申请
- 端侧意图调用调试工具申请
- 意图声明文件中注册意图
- 开发实现意图调用/意图共享
- 端到端验证特性
- 应用市场上架软件包(应用/元服务)
- 意图框架注册
本库涉及开发接入的主要工作在实现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,请自由地享受和参与开源。