在Stage模型中,Want是对象间信息传递的载体,可以用于应用组件间的信息传递。而在FA模型中,Intent是与之有相同概念的类。
Want的使用场景之一是作为startAbility的参数,其包含指定的启动目标,以及启动时需携带的相关数据,如bundleName和abilityName字段分别指明目标Ability所在应用的包名以及对应包内的Ability名称。当AbilityA启动AbilityB并需要传入一些数据给AbilityB时,Want可以作为一个数据载体将数据传给AbilityB,如图2-9所示。
图2-9 Want用法示意
Want的类型主要分为显式和隐式。
1 显式Want
在启动Ability时指定了abilityName和bundleName的Want称为显式Want。
当有明确处理请求的对象时,通过提供目标Ability所在应用的包名信息(bundleName),并在Want内指定abilityName便可启动目标Ability。显式Want通常在启动当前应用开发中某个已知Ability时被用到,示例如下:
2 隐式Want
在启动Ability时未指定abilityName的Want称为隐式Want。
当请求处理的对象不明确时,如开发者希望在当前应用中使用其他应用提供的某个能力(通过skills定义),而不关心提供该能力的具体应用时,可以使用隐式Want。例如使用隐式Want描述需要打开一个链接的请求,而不关心通过具体哪个应用打开,系统将匹配声明支持该请求的所有应用。当未匹配到支持的应用时,系统将弹窗说明无法打开;当仅匹配到一个应用时,系统将自动拉起对应应用;当匹配到多个应用时,系统将弹出候选列表,由用户选择拉起哪个应用,示例如下:
其中,action表示调用方要执行的通用操作(如查看、分享、应用详情)。在隐式Want中,可定义该字段,配合uri或parameters来表示对数据要执行的操作,如打开、查看该uri数据等。例如,当uri为一段网址、action为ohos.want.action.viewData时,表示匹配可查看该网址的Ability。在Want内声明action字段,表示希望被调用方应用支持声明的操作。在被调用方应用配置文件skills字段内声明action字段,表示该应用支持声明操作。
常见的action如下。
· ACTION_HOME:启动应用入口组件的动作,需要和ENTITY_HOME配合使用。系统桌面应用图标就是显式的入口组件,单击也是启动入口组件。入口组件可以配置多个。
· ACTION_CHOOSE:选择本地资源数据,例如联系人、相册等。系统一般对不同类型的数据有对应的Picker应用,例如联系人和图库。
· ACTION_VIEW_DATA:查看数据,当使用网址uri时,表示显示该网址对应的内容。
· ACTION_VIEW_MULTIPLE_DATA:发送多个数据记录的操作。
entities表示目标Ability的类别信息(如浏览器、视频播放器),在隐式Want中是对action的补充。在隐式Want中,开发者可定义该字段来过滤匹配应用的类别,例如必须是浏览器。在Want内声明entities字段,表示希望被调用方应用属于声明的类别。在被调用方应用配置文件skills字段内声明entites,表示该应用支持的类别。
常用的entities如下。
· ENTITY_DEFAULT:默认类别无实际意义。
· ENTITY_HOME:主屏幕有图标单击入口类别。
· ENTITY_BROWSABLE:指示浏览器类别。
所action和entities都定义在wantConstant模块中。
Want参数属性说明如表2-1所示。
表2-1 Want参数属性说明