【鸿蒙开发】第十二章 Stage模型应用组件-信息传递载体Want

1 概述

上一章节我们学习了UIAbility组件【鸿蒙开发】第十一章 Stage模型应用组件-UIAbility,其中组件间的交互传递信息的媒介就是Want,本章节我们来更加深入学习Want的相关知识。
Want是一种对象,用于在应用组件之间传递信息。
在这里插入图片描述

2 类型

  1. 显式Want:在启动目标应用组件时,调用方传入的want参数中指定了abilityNamebundleName,称为显式Want
  2. 隐式Want:在启动目标应用组件时,调用方传入的want参数中未指定abilityName,称为隐式Want
import Want from '@ohos.app.ability.Want';

// 1. 显式Want
let wantInfo: Want = {
  deviceId: '', // deviceId为空表示本设备
  bundleName: 'com.example.myapplication',
  abilityName: 'FuncAbility',
}

// 2. 隐式Want
let wantInfo: Want = {
  // uncomment line below if wish to implicitly query only in the specific bundle.
  // bundleName: 'com.example.myapplication',
  action: 'ohos.want.action.search',
  // entities can be omitted
  entities: [ 'entity.system.browsable' ],
  uri: 'https://www.test.com:8080/query/student',
  type: 'text/plain',
};

3 匹配规则

调用方传入的want参数中设置的参数如何与目标应用组件声明的配置文件进行匹配
在这里插入图片描述
在这里插入图片描述

  1. 调用方传入的want参数,表明调用方需要执行的操作,并提供相关数据以及其他应用类型限制。
  2. 待匹配应用组件的skills配置,声明其具备的能力(module.json5配置文件中的skills标签参数)。

系统将调用方传入的want参数(包含actionentitiesuritype属性)与已安装待匹配应用组件的skills配置(包含actionsentitiesuristype属性)依次进行匹配。当四个属性匹配均通过,则此应用才会被应用选择器展示给用户进行选择。

3.1 want参数的action匹配规则

在这里插入图片描述

3.2 want参数的entities匹配规则

在这里插入图片描述

3.3 want参数的uri和type匹配规则

调用方传入的want参数中设置uritype参数发起启动应用组件的请求,系统会遍历当前系统已安装的组件列表,并逐个匹配待匹配应用组件的skills配置中的uris数组,如果待匹配应用组件的skills配置中的uris数组中只要有一个可以匹配调用方传入的want参数中设置的uritype即为匹配成功。
在这里插入图片描述
为了简化描述:

  1. 称调用方传入的want参数中的uri参数为w_uri;待匹配应用组件的skills配置中uris_uri,其中每个元素为s_uri
  2. 称调用方传入的want参数的type参数为w_type,待匹配应用组件的skills数组中uristype数据为s_type
    在这里插入图片描述

3.4 uri匹配规则

具体的匹配规则如下:

  1. 如果s_urischeme为空,当w_uri为空时匹配成功,否则匹配失败。
  2. 如果s_urihost为空,当w_uris_urischeme相同时匹配成功,否则匹配失败。
  3. 如果s_uriport为空,当w_uris_uri中的schemehost相同时匹配成功,否则匹配失败。
  4. 如果s_uripathpathStartWithpathRegex都为空,当w_uris_uri中的schemehostport相同时匹配成功,否则匹配失败。
  5. 如果s_uripath不为空,当w_uris_uri全路径表达式相同时匹配成功,否则继续进行pathStartWith的匹配。
  6. 如果s_uripathStartWith不为空,当w_uri包含s_uri前缀表达式时匹配成功,否则继续进行pathRegex的匹配。
  7. 如果s_uripathRegex不为空,当w_uri满足uri正则表达式时匹配成功,否则匹配失败。

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

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

3.5 type匹配规则

type匹配规则的适用性需建立在want参数内type不为空的基础上。当want参数内type为空时请参见want参数的uritype匹配规则。

具体的匹配规则如下:

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

4 action与entities

4.1 action

action:表示调用方要执行的通用操作(如查看、分享、应用详情)。在隐式Want中,您可定义该字段,配合uriparameters来表示对数据要执行的操作。如打开,查看该uri数据。例如,当uri为一段网址,actionohos.want.action.viewData则表示匹配可查看该网址的应用组件。在Want内声明action字段表示希望被调用方应用支持声明的操作。在被调用方应用配置文件skills字段内声明actions表示该应用支持声明操作。

1. ACTION_HOME:启动应用入口组件的动作,需要和ENTITY_HOME配合使用;系统桌面应用图标就是显式的入口组件,点击也是启动入口组件;入口组件可以配置多个。
2. ACTION_CHOOSE:选择本地资源数据,例如联系人、相册等;系统一般对不同类型的数据有对应的Picker应用,例如联系人和图库。
3. ACTION_VIEW_DATA:查看数据,当使用网址uri时,则表示显示该网址对应的内容。
4. ACTION_VIEW_MULTIPLE_DATA:发送多个数据记录的操作。

4.2 entities

entities:表示目标应用组件的类别信息(如浏览器、视频播放器),在隐式Want中是对action的补充。在隐式Want中,开发者可定义该字段,来过滤匹配应用的类别,例如必须是浏览器。在Want内声明entities字段表示希望被调用方应用属于声明的类别。在被调用方应用配置文件skills字段内声明entites表示该应用支持的类别。

1. ENTITY_DEFAULT:默认类别无实际意义。
2. ENTITY_HOME:主屏幕有图标点击入口类别。
3. ENTITY_BROWSABLE:指示浏览器类别。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【CSS】常见

一. 溢出隐藏 1.1 单行文本溢出 .content{max-width:200px; /* 定义容器最大宽度 */overflow:hidden; /* 隐藏溢出的内容 */text-overflow:ellipsis; /* 溢出部分...表示 */white-space: nowrap; /* 确保文本在一行内显示 */ }问题:display:flex 和 ellipsis 冲…

Centos7安装原生Nginx并配置反向代理

一、背景 当我的应用程序需要集群化部署之时,必然需要一个反向代理,当然Nginx的大名,这里不做更多的介绍了,这里介绍一下Nginx常用的四大阵营 1 Ngnix 原生版本 nginx news 2 Nginx Plus 商用版(收费的&#xff09…

【JAVA】Long类型返回到前端,精度丢失

一. 问题阐述 20位long类型的数字,从后端接口返回到前端后【四舍五入】 MYSQL端 (1)bigint (20) (2)具体某一条数据 JAVA端 (1)实体类 (2)服务类 (3&…

传统企业要实现数字化转型,需要从哪些方面入手?

数字化转型是一个综合过程,涉及利用数字技术从根本上改变企业运营方式并为客户提供价值。希望踏上数字化转型之旅的传统企业应考虑几个关键方面,以确保成功、平稳过渡。以下是一些需要开始的基本方面: 1.领导承诺: 自上而下的支…

idea Statistic使用

问题描述:本地idea版本为2018.3.5,安装Statistic插件后没有出现Statistic图标 原因如下:插件版本太新了,需要历史版本 解决办法: IDEA安装代码统计插件Statistic后左下角图标出不来(亲测)_idea statistic不展示-CSD…

20240130在ubuntu20.04.6下卸载NVIDIA显卡的驱动

20240130在ubuntu20.04.6下卸载NVIDIA显卡的驱动 2024/1/30 12:58 缘起,为了在ubuntu20.4.6下使用whisper,以前用的是GTX1080M,装了535的驱动。 现在在PDD拼多多上了入手了一张二手的GTX1080,需要将安装最新的545的驱动程序&#…

老网工秒懂的行业“黑话”,你对齐颗粒度了吗?

你们好,我的网工朋友。 年关将至,多少网工朋友放假了?学技术的心是不是都飘走了。 快过年了,准备和大家聊点有趣、轻松的话题。 前两天部门团建,大家一起去看了年会不能停,挺有意思。 互联网黑话那是一…

解析Kubernets pod DNS域名

k8s dns理解 这个博主讲的很详细 我的这篇文章主要是演示测试 k8s的dns nslookup怎么解析到k8spod域名 创建一个busybox的pod&#xff0c;测试一下pod内是否可以解析 1、流程验证 cat >dns-Deployment.yaml<<EOF apiVersion: apps/v1 kind: Deployment metadata:nam…

PLC找出数据队列里的最大数和最小数所在序号(完整SCL代码)

对于一些需要根据累计运行时间智能启泵和停泵的应用场景,可能会用到此算法,在学习本算法之前,我们需要了解如何在一组数据队列里找出最大数和最小数(这里不涉及排序,只要找到最大数和最小数)。 最大数和最小数搜索FC 请参考下面文章链接: https://rxxw-control.blog.csd…

java+springboot企业员工工作日志审批管理系统ssm+vue

企业OA管理系统具有管理员角色&#xff0c;用户角色&#xff0c;这两个操作权限。 ①管理员 管理员在企业OA管理系统里面查看并管理人事信息&#xff0c;工作审批信息&#xff0c;部门信息&#xff0c;通知公告信息以及内部邮件信息。 管理员功能结构图如下&#xff1a; ide工具…

服务器部署geoserver

linux 进入服务器&#xff0c;创建geoserver文件夹并且解压压缩包 cd /opt mkdir geoserver unzip geoserver-2.19.x-2023-09-22-bin.zip编辑start.ini文件&#xff0c;将port更改为自己的端口 进入bin目录&#xff0c;执行命令包 cd /opt/geoserver/bin ./startup.sh 浏览器…

GoLang和GoLand的安装和配置

1. GoLang 1.1 特点介绍 Go 语言保证了既能达到静态编译语言的安全和性能&#xff0c;又达到了动态语言开发维护的高效率&#xff0c;使用一个表达式来形容 Go 语言&#xff1a;Go C Python , 说明 Go 语言既有 C 静态语言程序的运行速度&#xff0c;又能达到 Python 动态语…

SpringBoot集成MongoDB(3)|(MongoTemplate的List操作)

SpringBoot集成MongoDB&#xff08;3&#xff09;|&#xff08;MongoTemplate的List操作&#xff09; 文章目录 SpringBoot集成MongoDB&#xff08;3&#xff09;|&#xff08;MongoTemplate的List操作&#xff09;[TOC] 前言一、场景说明一、向数组字段添加元素二、从数组中删…

Kube-Promethus配置Nacos监控

Kube-Promethus配置Nacos监控 前置&#xff1a;Kube-Promethus安装监控k8s集群 一.判断Nacos开启监控配置 首先通过集群内部任一节点访问Nacos的这个地址<NacosIP>:端口号/nacos/actuator/prometheus&#xff0c;查看是否能够获取监控数据。 如果没有数据则修改Nacos集群…

【数据结构 02】队列

一、原理 队列通常是链表结构&#xff0c;只允许在一端进行数据插入&#xff0c;在另一端进行数据删除。 队列的特性是链式存储&#xff08;随机增删&#xff09;和先进先出&#xff08;FIFO&#xff1a;First In First Out&#xff09;。 队列的缺陷&#xff1a; 不支持随机…

[Python] 什么是集成算法,什么是随机森林?随机森林分类器(RandomForestClassifier)及其使用案例

什么是集成算法&#xff1f; 集成算法是一种机器学习方法&#xff0c;它将多个基本的学习算法&#xff08;也称为弱学习器&#xff09;组合在一起&#xff0c;形成一个更强大的预测模型。集成算法通过对基本模型的预测进行加权平均或多数投票等方式&#xff0c;来产生最终的预…

蓝桥OJ 3695聪明的小羊肖恩

思路&#xff1a;这道题利用二分和不等式的性质。1<i<j<n且L<a[i] a[j] < R > L - a[i] < a[j] < R - a[i]。遍历找出大于等于L - a[i] 和 大于 R - a[i] 的区间&#xff0c;区间长度即为当前i对应的下标对数。所有对数累加即为满足条件的下标对数量。…

elk之基础概念

写在前面 本文一起看下es的基础概念&#xff0c;比较枯燥的内容说&#xff0c;但不看又不行。开始。 1&#xff1a;document 文档&#xff0c;是es搜索存储数据的最小单元&#xff0c;相当于是MySQL的一行记录&#xff0c;但es中是一个json&#xff0c;如下是一个通过logsta…

ARDUINO 与ISP下载器使用相关注意事项

当用isp给arduno下载程序之后&#xff0c;板子上的bootloader将会丢失&#xff0c;所以要重新烧录bootloader&#xff0c;既然要烧录bootloader&#xff0c;那么什么是bootloader呢&#xff1f;正如你所想&#xff0c;bootloader当然是一个程序&#xff0c;既然要烧录到单片机中…

正则表达式补充以及sed

正则表达式&#xff1a; 下划线算 在单词里面 解释一下过程&#xff1a; 在第二行hello world当中&#xff0c;hello中的h 与后面第一个h相匹配&#xff0c;所以hello中的ello可以和abcde匹配 在world中&#xff0c;w先匹配h匹配不上&#xff0c;则在看0&#xff0c;r&#…