一、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.UIAbilityContextawait 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.UIAbilityContextcontext.startAbility(wantInfo)
}
官方文档地址: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/explicit-implicit-want-mappings-0000001478061453-V2