一、Want概述
1.1、Want的用途
- 在Stage模型中,Want是对象间信息传递的载体,可以用在应用组件间的信息传递。相当于FA模型的Intent。
- 作为startAbility的参数,包含指定的启动目标,以及启动时需要携带的相关数据(bundleName和AbilityName字段分别指明目标Ability所在应用的包名以及对应的Ability名称)。
1.2、Want的分类
- 显示Want
- 在启动Ability时指定了abilityName和bundleName的Want叫做显示Want。
- 当有明确处理请求的对象时,通过提供目标Ability所在应用的包名信息(bundleName),并在Want内指定abilityName即可启动目标Ability。显示Want通常在启动当前应用开发中某个已知的Ability时被用到。
let want:Want = {
deviceId:'',
bundleName:'',
abilityName:''
}
- 隐式Want
- 在启动时未指定abilityName和Want叫做隐式Want。
- 在请求处理的对象不明确时,如开发者希望在当前应用中使用其他应用提供的某个能力(通过skill定义),而不关心提供该能力的具体应用时,可以使用隐式Want。例如使用隐式Want打开一个链接的请求时,系统将匹配声明支持该请求的所有应用,当未匹配到支持的应用时,系统将弹窗说明无法打开,当仅匹配一个时,系统将自动拉起对应应用,当匹配多个时,系统会弹出候选项,由用户自己选择
let want:Want = {
action:'ohos,want,action,search',
entities:['entity.system.browsable'],
uri:'http://www.test.com/query/search',
type:'text/plan'
}
- action表示调用方要执行的通用操作
- action表示调用方要执行的通用操作(如查看,分享,应用详情)。在隐式Want中,可定义该字段,配合uri和parameters来表示对数据要执行的操作,比如打开,查看该uri数据等。
- 当uri为一段网址时,action为’ohos.want.action.viewData’时,表示匹配可查看该网址的Ability。
- 在Want内声明action字段,表示希望被调用方应用支持声明的操作。在被调用方应用配置文件skills字段内声明action字段,表示该应用支持声明操作。
- 常见的action:
ACTION_HOEM | 启动应用入口组件的动作 |
---|
ACTION_CHOOSE | 选择本地资源数据,例如联系人,相册等,系统一般对不同类型的数据有对应的Picker应用 |
ACTION_VIEW_DATA | 查看数据,但使用网址时,表示显示该网址对用的内容 |
ACTION_VIEW_MULTIPLE_DATA | 发送多个数据记录的操作 |
- entities表示目标Ability的类别信息
- entities表示目标Ability的类别信息(浏览器,视频播放器),在隐式Want中是对action的补充
- 在隐式Want中,开发者可定义该字段来过滤匹配应用的类别,例如是浏览器或者是播放器
- 在Want中声明entities字段,表示希望被调用方应用属于声明的类型。在被调用方应用配置文件skills字段中声明entities,表示该应用支持的类别
ENTITY_DEFAULT | 默认类别,无实际意义 |
---|
ENTITY_HOME | 主屏幕有图标单击入口类别 |
ENTITY_BROWSABLE | 指示浏览器类别 |
1.3、Want参数属性
名称 | 类型 | 描述 |
---|
deviceId | string | 表示目标Ability所在的设备ID,如果未设置,表示本设备 |
bundleName | string | 表示目标Ability所在的应用名称 |
moduleName | string | 表示目标Ability所在的模块名称 |
abilityName | string | 表示目标的Ability名称,如果未设置该字段,则Want为隐式,如果在Want中同时指定了bundleName,moudleName和abilityName,Want可以直接匹配到指定的Ability |
uri | string | 表示携带的数据,一般配合type使用,指明待处理的数据类型,如果在Want中指定了uri,则Want将匹配指定的uri信息,包括sheme,shemeSpecificPart,authory和path信息 |
type | string | 表示携带数据类型,使用MIME类型规范,例如text/plane,image/* |
action | string | action表示调用方要执行的通用操作(如查看,分享,应用详情)。在隐式Want中,可定义该字段,配合uri和parameters来表示对数据要执行的操作,比如打开,查看该uri数据等。当uri为一段网址时,action为’ohos.want.action.viewData’时,表示匹配可查看该网址的Ability |
entities | Array | entities表示目标Ability的类别信息(浏览器,视频播放器),在隐式Want中是对action的补充。在隐式Want中,开发者可定义该字段来过滤匹配应用的类型,比如通过entity.system.browsable过滤掉非浏览器的应用 |
flags | number | 表示处理Want的方式,例如通过wantConstant.Flags.FLAG_ABILITY_CONTINUATION表示是否以设备间迁移方式启动Ability |
parameters | {[key:string]:any} | 用于传递参数,通过用户自定义的键值对进行数据填充,具体支持的数据类型如WantApi所示 |
二、显示Want启动Ability
/**
* 使用显示Want跳转界面
*/
async explicitStartAbility(){
let wantInfo:Want={
deviceId:'',
bundleName:'com.example.project1',
abilityName:'SecondAbility'
}
let context = getContext(this) as common.UIAbilityContext
await context.startAbility(wantInfo)
}
2.1、 Stage模型下上下文的获取
let context = getContext(this) as common.UIAbilityContext
三、隐式Want打开网页
/**
* 使用隐式Want启动任务管理器
*/
async implicitStartAbility(){
let wantInfo : Want ={
"action": "ohos.want.action.viewData",
"entities": [ "entity.system.browsable" ],
"uri": "https://www.test.com:8080/query/student",
"type": "text/plain"
}
let context = getContext(this) as common.UIAbilityContext
context.startAbility(wantInfo)
}
官方文档地址:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/explicit-implicit-want-mappings-0000001478061453-V2