HarmonyOS 应用开发之显式Want与隐式Want匹配规则

在启动目标应用组件时,会通过显式 Want 或者隐式 Want 进行目标应用组件的匹配,这里说的匹配规则就是调用方传入的 want 参数中设置的参数如何与目标应用组件声明的配置文件进行匹配。

显式Want匹配原理

显式 Want 匹配原理如下表所示。

名称类型匹配项必选规则
deviceIdstring留空将仅匹配本设备内的应用组件。
bundleNamestring如果指定abilityName,而不指定bundleName,则匹配失败。
moduleNamestring留空时当同一个应用内存在多个模块且模块间存在重名应用组件,将默认匹配第一个。
abilityNamestring该字段必须设置表示显式匹配。
uristring系统匹配时将忽略该参数,但仍可作为参数传递给目标应用组件。
typestring系统匹配时将忽略该参数,但仍可作为参数传递给目标应用组件。
actionstring系统匹配时将忽略该参数,但仍可作为参数传递给目标应用组件。
entitiesArray系统匹配时将忽略该参数,但仍可作为参数传递给目标应用组件。
flagsnumber不参与匹配,直接传递给系统处理,一般用来设置运行态信息,例如URI数据授权等。
parameters{[key: string]: Object}不参与匹配,应用自定义数据将直接传递给目标应用组件。

隐式Want匹配原理

隐式 Want 匹配原理如下表所示。

名称类型匹配项必选规则
deviceIdstring跨设备目前不支持隐式调用。
abilityNamestring该字段必须留空表示隐式匹配。
bundleNamestring匹配对应应用包内的目标应用组件。
moduleNamestring匹配对应Module内的目标应用组件。
uristring参见 want参数的uri和type匹配规则。
typestring参见 want参数的uri和type匹配规则。
actionstring参见 want参数的action匹配规则。
entitiesArray参见 want参数的entities匹配规则。
flagsnumber不参与匹配,直接传递给系统处理,一般用来设置运行态信息,例如URI数据授权等。
parameters{[key: string]: Object}不参与匹配,应用自定义数据将直接传递给目标应用组件。

从隐式Want的定义,可得知:

  • 调用方传入的want参数,表明调用方需要执行的操作,并提供相关数据以及其他应用类型限制。

  • 待匹配应用组件的skills配置,声明其具备的能力( module.json5配置文件 中的 skills标签参数)。

系统将调用方传入的want参数(包含action、entities、uri和type属性)与已安装待匹配应用组件的skills配置(包含actions、entities、uris和type属性)依次进行匹配。当四个属性匹配均未配置,隐式匹配失败。当四个属性匹配均通过,则此应用才会被应用选择器展示给用户进行选择。

want参数的action匹配规则

将调用方传入的want参数的action与待匹配应用组件的skills配置中的actions进行匹配。

  • 调用方传入的want参数的action为空,待匹配Ability的skills配置中的actions为空,则action匹配失败。
  • 调用方传入的want参数的action不为空,待匹配应用组件的skills配置中的actions为空,则action匹配失败。
  • 调用方传入的want参数的action为空,待匹配应用组件的skills配置中的actions不为空,则action匹配成功。
  • 调用方传入的want参数的action不为空,待匹配应用组件的skills配置中的actions不为空且包含调用方传入的want参数的action,则action匹配成功。
  • 调用方传入的want参数的action不为空,待匹配应用组件的skills配置中的actions不为空且不包含调用方传入的want参数的action,则action匹配失败。

图1 want参数的action匹配规则

want参数的entities匹配规则

将调用方传入的want参数的entities与待匹配应用组件的skills配置中的entities进行匹配。

  • 调用方传入的want参数的entities为空,待匹配应用组件的skills配置中的entities不为空,则entities匹配成功。
  • 调用方传入的want参数的entities为空,待匹配应用组件的skills配置中的entities为空,则entities匹配成功。
  • 调用方传入的want参数的entities不为空,待匹配应用组件的skills配置中的entities为空,则entities匹配失败。
  • 调用方传入的want参数的entities不为空,待匹配应用组件的skills配置中的entities不为空且包含调用方传入的want参数的entities,则entities匹配成功。
  • 调用方传入的want参数的entities不为空,待匹配应用组件的skills配置中的entities不为空且不完全包含调用方传入的want参数的entities,则entities匹配失败。

图2 want参数的entities匹配规则

want参数的uri和type匹配规则

调用方传入的want参数中设置uri和type参数发起启动应用组件的请求,系统会遍历当前系统已安装的组件列表,并逐个匹配待匹配应用组件的skills配置中的uris数组,如果待匹配应用组件的skills配置中的uris数组中只要有一个可以匹配调用方传入的want参数中设置的uri和type即为匹配成功。

实际应用中,uri和type共存在四种情况,下面将讲解四种情况的具体匹配规则:

  • 调用方传入的want参数的uri和type都为空。

    1. 如果待匹配应用组件的skills配置中的uris数组为空,匹配成功。
    2. 如果待匹配应用组件的skills配置中的uris数组中存在uri的scheme和type都为空的元素,匹配成功。
    3. 除以上两种情况,其他情况均为匹配失败。
  • 调用方传入的want参数的uri不为空,type为空。

    1. 如果待匹配应用组件的skills配置中的uris数组为空,匹配失败。
    2. 如果待匹配应用组件的skills配置中的uris数组存在一条数据 uri匹配 成功且type为空,则匹配成功,否则匹配失败。
    3. 如果前两条均匹配失败,并且传入的uri为文件路径uri,则根据文件后缀获取文件的MIME类型,如果该类型与skills文件中配置的type相匹配,则匹配成功。
  • 调用方传入的want参数的uri为空,type不为空。

    1. 如果待匹配应用组件的skills配置中的uris数组为空,匹配失败。
    2. 如果待匹配应用组件的skills配置中的uris数组存在一条数据uri的scheme为空且 type匹配 成功,则匹配成功,否则匹配失败。
  • 调用方传入的want参数的uri和type都不为空,如下图所示。

    1. 如果待匹配应用组件的skills配置中的uris数组为空,匹配失败。
    2. 如果待匹配应用组件的skills配置中的uris数组存在一条数据 uri匹配 和 type匹配 需要均匹配成功,则匹配成功,否则匹配失败。

最左uri匹配:当配置文件待匹配应用组件的skills配置中的uris数组中只配置scheme;或者只配置scheme和host;或者只配置scheme、host和port时。传入want参数的uri的最左边依次需要和scheme,或者scheme和host,或者scheme、host和port都匹配,才满足最左uri匹配。

图3 want参数中uri和type皆不为空时的匹配规则

为了简化描述:

  • 称调用方传入的want参数中的uri参数为w_uri;待匹配应用组件的skills配置中uri为s_uri,其中每个元素为s_uri。
  • 称调用方传入的want参数的type参数为w_type,待匹配应用组件的skills数组中uris的type数据为s_type。

图4 want参数中uri和type的具体匹配规则

uri匹配规则

具体的匹配规则如下:

  • 如果s_uri的scheme为空,当w_uri为空时匹配成功,否则匹配失败。
  • 如果s_uri的host为空,当w_uri和s_uri的scheme相同时匹配成功,否则匹配失败。
  • 如果s_uri的port为空,当w_uri和s_uri中的scheme和host相同时匹配成功,否则匹配失败。
  • 如果s_uri的path、pathStartWith和pathRegex都为空,当w_uri和s_uri中的scheme,host和port相同时匹配成功,否则匹配失败。
  • 如果s_uri的path不为空,当w_uri和s_uri全路径表达式相同时匹配成功,否则继续进行pathStartWith的匹配。
  • 如果s_uri的pathStartWith不为空,当w_uri包含s_uri前缀表达式时匹配成功,否则继续进行pathRegex的匹配。
  • 如果s_uri的pathRegex不为空,当w_uri满足s_uri正则表达式时匹配成功,否则匹配失败。

说明:
待匹配应用组件的skills配置的uris中scheme、host、port、path、pathStartWith和pathRegex属性拼接,如果依次声明了path、pathStartWith和pathRegex属性时,uris将分别拼接为如下三种表达式:

  • 前缀uri表达式:当配置文件只配置scheme,或者只配置scheme和host,或者只配置scheme,host和port时,参数传入以配置文件为前缀的Uri
  • scheme://
  • scheme://host
  • scheme://host:port
  • 全路径表达式scheme://host:port/path
  • 前缀表达式scheme://host:port/pathStartWith
  • 正则表达式scheme://host:port/pathRegex

type匹配规则

说明:
本章节所述的type匹配规则的适用性需建立在want参数内type不为空的基础上。当want参数内type为空时请参见 want参数的uri和type匹配规则 。

具体的匹配规则如下:

  • 如果s_type为空,则匹配失败。
  • 如果s_type或者w_type为通配符*/*,则匹配成功。
  • 如果s_type最后一个字符为通配符*,如prefixType/*,则当w_type包含prefixType/时匹配成功,否则匹配失败。
  • 如果w_type最后一个字符为通配符*,如prefixType/*,则当s_type包含prefixType/时匹配成功,否则匹配失败。

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2904843.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【leetcode】环形链表的约瑟夫问题

大家好,我是苏貝,本篇博客带大家刷题,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 点击查看题目 首先我们要明确一点,题目要求我们要用环形链表,所以用数组等是不被允…

某某消消乐增加步数漏洞分析

一、漏洞简介 1) 漏洞所属游戏名及基本介绍:某某消消乐,三消游戏,类似爱消除。 2) 漏洞对应游戏版本及平台:某某消消乐Android 1.22.22。 3) 漏洞功能:增加游戏步数。 4&#xf…

Spark-Scala语言实战(6)

在之前的文章中,我们学习了如何在scala中定义与使用类和对象,并做了几道例题。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 Spark-S…

智能设备配网保姆级教程

设备配网 简单来说,配网就是将物联网(IoT)设备连接并注册到云端,使其拥有与云端远程通信的能力。配网后,智能设备才能被手机应用或者项目管理后台控制,依托于智能场景创造价值。本文介绍了配网的相关知识&…

Linux环境安装Redis

Linux环境安装Redis 一,软件安装准备 服务器连接软件 Redis数据库连接软件 这是Windows软件,用于连接Linux服务器使用。推荐使用。 二,下载Redis 下载地址:Index of /releases/ 截止编稿Redis版本已经到7.2.4了,如果…

如何使用Windows电脑部署Lychee私有图床网站并实现无公网IP远程管理本地图片

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-MSVdVLkQMnY9Y2HW {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

什么是RISC-V?开源 ISA 如何重塑未来的处理器设计

RISC-V代表了处理器架构的范式转变,特点是其开源模型简化了设计理念并促进了全球community-driven的开发。RISC-V导致了处理器技术发展前进方式的重大转变,提供了一个不受传统复杂性阻碍的全新视角。 RISC-V起源于加州大学伯克利分校的学术起点&#xff…

腾讯云服务器多少钱一年?2024年最新价格整理

2024年腾讯云4核8G服务器租用优惠价格:轻量应用服务器4核8G12M带宽646元15个月,CVM云服务器S5实例优惠价格1437.24元买一年送3个月,腾讯云4核8G服务器活动页面 txybk.com/go/txy 活动链接打开如下图: 腾讯云4核8G服务器优惠价格 轻…

设计模式 - 简单工厂模式

文章目录 前言 大家好,今天给大家介绍一下23种常见设计模式中的一种 - 工厂模式 1 . 问题引入 请用C、Java、C#或 VB.NET任意一种面向对象语言实现一个计算器控制台程序,要求输入两个数和运算符 号,得到结果。 下面的代码实现默认认为两个操作数为Inte…

阿里云CentOS7安装Hadoop3伪分布式

ECS准备 开通阿里云ECS 略 控制台设置密码 连接ECS 远程连接工具连接阿里云ECS实例,这里远程连接工具使用xshell 根据提示接受密钥 根据提示写用户名和密码 用户名:root 密码:在控制台设置的密码 修改主机名 将主机名从localhost改为需要…

excel中批量插入分页符

excel中批量插入分页符,实现按班级打印学生名单。 1、把学生按照学号、班级排序好。 2、选择班级一列,点击数据-分类汇总。汇总方式选择计数,最后三个全部勾选。汇总结果一定要显示在数据的下发,如果显示在上方,后期…

操作教程|在MeterSphere中通过SSH登录服务器的两种方法

MeterSphere开源持续测试平台拥有非常强大的插件集成机制,用户可以通过插件实现平台能力的拓展,借助插件或脚本实现多种功能。在测试过程中,测试人员有时需要通过SSH协议登录至服务器,以获取某些配置文件和日志文件,或…

Python爬虫:爬虫常用伪装手段

目录 前言 一、设置User-Agent 二、设置Referer 三、使用代理IP 四、限制请求频率 总结 前言 随着互联网的快速发展,爬虫技术在网络数据采集方面发挥着重要的作用。然而,由于爬虫的使用可能会对被爬取的网站造成一定的压力,因此&#…

HarmonyOS实战开发-实现带有卡片的电影应用

介绍 本篇Codelab基于元服务卡片的能力,实现带有卡片的电影应用,介绍卡片的开发过程和生命周期实现。需要完成以下功能: 元服务卡片,用于在桌面上添加2x2或2x4规格元服务卡片。关系型数据库,用于创建、查询、添加、删…

SQL,group by分组后分别计算组内不同值的数量

SQL,group by分组后分别计算组内不同值的数量 如现有一张购物表shopping 先要求小明和小红分别买了多少笔和多少橡皮,形成以下格式 SELECT name,COUNT(*) FROM shopping GROUP BY name;SELECT name AS 姓名,SUM( CASE WHEN cargo 笔 THEN 1 ELSE 0 END)…

Prometheus +Grafana +node_exporter可视化监控Linux虚机

1、介绍 待补充 2、架构图 待补充 Prometheus :主要是负责存储、抓取、聚合、查询方面。 node_exporter :主要是负责采集物理机、中间件的信息。 3、搭建过程 配置要求:1台主服务器 n台从服务器 (被监控的linux虚机&am…

百度智能云千帆,产业创新新引擎

本文整理自 3 月 21 日百度副总裁谢广军的主题演讲《百度智能云千帆,产业创新新引擎》。 各位领导、来宾、媒体朋友们,大家上午好。很高兴今天在石景山首钢园,和大家一起沟通和探讨大模型的发展趋势,以及百度最近一段时间的思考和…

软件杯 深度学习+python+opencv实现动物识别 - 图像识别

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数:3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 inception_v3网络5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 *…

在Semantic Kernel中使用Qdrant向量数据库

本文将介绍如何在Semantic Kernel中使用Qdrant向量数据库,并演示如何在Semantic Kernel中进行向量更新和查询操作。 1. 背景 在前一篇文章《Qdrant 向量数据库的部署以及如何在 .NET 中使用 TLS 安全访问》中,我们介绍了如何使用 Docker 部署 Qdrant 向…

RestTemplate 请求响应数据出现乱码问题,RestTemplate 如何解压缩 gzip 数据

文章目录 1.问题描述2.问题分析3.问题解决3.1 Apache HttpClient 依赖3.2 RestTemplate 配置类3.3 测试 1.问题描述 直接通过浏览器访问请求没有问题,但是通过 RestTemplate 访问请求却会出现乱码问题。 2.问题分析 首先我认为是 SpringBoot 版本、JDK 版本、项目结…