顯式Want與隱式Want匹配規(guī)則
在啟動(dòng)目標(biāo)應(yīng)用組件時(shí),會(huì)通過顯式[Want]或者隱式[Want]進(jìn)行目標(biāo)應(yīng)用組件的匹配,這里說的匹配規(guī)則就是調(diào)用方傳入的[want]參數(shù)中設(shè)置的參數(shù)如何與目標(biāo)應(yīng)用組件聲明的配置文件進(jìn)行匹配。
顯式Want匹配原理
顯式[Want]匹配原理如下表所示。
名稱 | 類型 | 匹配項(xiàng) | 必選 | 規(guī)則 |
---|---|---|---|---|
deviceId | string | 是 | 否 | 留空將僅匹配本設(shè)備內(nèi)的應(yīng)用組件。 |
bundleName | string | 是 | 是 | 如果指定abilityName,而不指定bundleName,則匹配失敗。 |
moduleName | string | 是 | 否 | 留空時(shí)當(dāng)同一個(gè)應(yīng)用內(nèi)存在多個(gè)模塊且模塊間存在重名應(yīng)用組件,將默認(rèn)匹配第一個(gè)。 |
abilityName | string | 是 | 是 | 該字段必須設(shè)置表示顯式匹配。 |
uri | string | 否 | 否 | 系統(tǒng)匹配時(shí)將忽略該參數(shù),但仍可作為參數(shù)傳遞給目標(biāo)應(yīng)用組件。 |
type | string | 否 | 否 | 系統(tǒng)匹配時(shí)將忽略該參數(shù),但仍可作為參數(shù)傳遞給目標(biāo)應(yīng)用組件。 |
action | string | 否 | 否 | 系統(tǒng)匹配時(shí)將忽略該參數(shù),但仍可作為參數(shù)傳遞給目標(biāo)應(yīng)用組件。 |
entities | Array | 否 | 否 | 系統(tǒng)匹配時(shí)將忽略該參數(shù),但仍可作為參數(shù)傳遞給目標(biāo)應(yīng)用組件。 |
flags | number | 否 | 否 | 不參與匹配,直接傳遞給系統(tǒng)處理,一般用來設(shè)置運(yùn)行態(tài)信息,例如URI數(shù)據(jù)授權(quán)等。 |
parameters | {[key: string]: Object} | 否 | 否 | 不參與匹配,應(yīng)用自定義數(shù)據(jù)將直接傳遞給目標(biāo)應(yīng)用組件。 |
隱式Want匹配原理
隱式[Want]匹配原理如下表所示。
名稱 | 類型 | 匹配項(xiàng) | 必選 | 規(guī)則 |
---|---|---|---|---|
deviceId | string | 是 | 否 | 跨設(shè)備目前不支持隱式調(diào)用。 |
abilityName | string | 否 | 否 | 該字段必須留空表示隱式匹配。 |
bundleName | string | 是 | 否 | 匹配對(duì)應(yīng)應(yīng)用包內(nèi)的目標(biāo)應(yīng)用組件。 |
moduleName | string | 是 | 否 | 匹配對(duì)應(yīng)Module內(nèi)的目標(biāo)應(yīng)用組件。 |
uri | string | 是 | 否 | 參見[want參數(shù)的uri和type匹配規(guī)則]。 |
type | string | 是 | 否 | 參見[want參數(shù)的uri和type匹配規(guī)則]。 |
action | string | 是 | 否 | 參見[want參數(shù)的action匹配規(guī)則]。 |
entities | Array | 是 | 否 | 參見[want參數(shù)的entities匹配規(guī)則]。 |
flags | number | 否 | 否 | 不參與匹配,直接傳遞給系統(tǒng)處理,一般用來設(shè)置運(yùn)行態(tài)信息,例如URI數(shù)據(jù)授權(quán)等。 |
parameters | {[key: string]: Object} | 否 | 否 | 不參與匹配,應(yīng)用自定義數(shù)據(jù)將直接傳遞給目標(biāo)應(yīng)用組件。 |
從隱式Want的定義,可得知:
- 調(diào)用方傳入的want參數(shù),表明調(diào)用方需要執(zhí)行的操作,并提供相關(guān)數(shù)據(jù)以及其他應(yīng)用類型限制。
- 待匹配應(yīng)用組件的skills配置,聲明其具備的能力([module.json5配置文件]參數(shù))。
系統(tǒng)將調(diào)用方傳入的want參數(shù)(包含action、entities、uri和type屬性)與已安裝待匹配應(yīng)用組件的skills配置(包含actions、entities、uris和type屬性)依次進(jìn)行匹配。當(dāng)四個(gè)屬性匹配均未配置,隱式匹配失敗。當(dāng)四個(gè)屬性匹配均通過,則此應(yīng)用才會(huì)被應(yīng)用選擇器展示給用戶進(jìn)行選擇。
want參數(shù)的action匹配規(guī)則
將調(diào)用方傳入的want參數(shù)的action與待匹配應(yīng)用組件的skills配置中的actions進(jìn)行匹配。
- 調(diào)用方傳入的want參數(shù)的action為空,待匹配Ability的skills配置中的actions為空,則action匹配失敗。
- 調(diào)用方傳入的want參數(shù)的action不為空,待匹配應(yīng)用組件的skills配置中的actions為空,則action匹配失敗。
- 調(diào)用方傳入的want參數(shù)的action為空,待匹配應(yīng)用組件的skills配置中的actions不為空,則action匹配成功。
- 調(diào)用方傳入的want參數(shù)的action不為空,待匹配應(yīng)用組件的skills配置中的actions不為空且包含調(diào)用方傳入的want參數(shù)的action,則action匹配成功。
- 調(diào)用方傳入的want參數(shù)的action不為空,待匹配應(yīng)用組件的skills配置中的actions不為空且不包含調(diào)用方傳入的want參數(shù)的action,則action匹配失敗。
圖1 want參數(shù)的action匹配規(guī)則
want參數(shù)的entities匹配規(guī)則
將調(diào)用方傳入的want參數(shù)的entities與待匹配應(yīng)用組件的skills配置中的entities進(jìn)行匹配。
- 調(diào)用方傳入的want參數(shù)的entities為空,待匹配應(yīng)用組件的skills配置中的entities不為空,則entities匹配成功。
- 調(diào)用方傳入的want參數(shù)的entities為空,待匹配應(yīng)用組件的skills配置中的entities為空,則entities匹配成功。
- 調(diào)用方傳入的want參數(shù)的entities不為空,待匹配應(yīng)用組件的skills配置中的entities為空,則entities匹配失敗。
- 調(diào)用方傳入的want參數(shù)的entities不為空,待匹配應(yīng)用組件的skills配置中的entities不為空且包含調(diào)用方傳入的want參數(shù)的entities,則entities匹配成功。
- 調(diào)用方傳入的want參數(shù)的entities不為空,待匹配應(yīng)用組件的skills配置中的entities不為空且不完全包含調(diào)用方傳入的want參數(shù)的entities,則entities匹配失敗。
圖2 want參數(shù)的entities匹配規(guī)則
want參數(shù)的uri和type匹配規(guī)則
調(diào)用方傳入的want參數(shù)中設(shè)置uri和type參數(shù)發(fā)起啟動(dòng)應(yīng)用組件的請(qǐng)求,系統(tǒng)會(huì)遍歷當(dāng)前系統(tǒng)已安裝的組件列表,并逐個(gè)匹配待匹配應(yīng)用組件的skills配置中的uris數(shù)組,如果待匹配應(yīng)用組件的skills配置中的uris數(shù)組中只要有一個(gè)可以匹配調(diào)用方傳入的want參數(shù)中設(shè)置的uri和type即為匹配成功。
實(shí)際應(yīng)用中,uri和type共存在四種情況,下面將講解四種情況的具體匹配規(guī)則:
- 調(diào)用方傳入的want參數(shù)的uri和type都為空。
- 如果待匹配應(yīng)用組件的skills配置中的uris數(shù)組為空,匹配成功。
- 如果待匹配應(yīng)用組件的skills配置中的uris數(shù)組中存在uri的scheme和type都為空的元素,匹配成功。
- 除以上兩種情況,其他情況均為匹配失敗。
- 調(diào)用方傳入的want參數(shù)的uri不為空,type為空。
- 如果待匹配應(yīng)用組件的skills配置中的uris數(shù)組為空,匹配失敗。
- 如果待匹配應(yīng)用組件的skills配置中的uris數(shù)組存在一條數(shù)據(jù)[uri匹配]成功且type為空,則匹配成功,否則匹配失敗。
- 如果前兩條均匹配失敗,并且傳入的uri為文件路徑uri,則根據(jù)文件后綴獲取文件的MIME類型,如果該類型與skills文件中配置的type相匹配,則匹配成功。
- 調(diào)用方傳入的want參數(shù)的uri為空,type不為空。
- 如果待匹配應(yīng)用組件的skills配置中的uris數(shù)組為空,匹配失敗。
- 如果待匹配應(yīng)用組件的skills配置中的uris數(shù)組存在一條數(shù)據(jù)uri的scheme為空且[type匹配]成功,則匹配成功,否則匹配失敗。
- 調(diào)用方傳入的want參數(shù)的uri和type都不為空,如下圖所示。
- 如果待匹配應(yīng)用組件的skills配置中的uris數(shù)組為空,匹配失敗。
- 如果待匹配應(yīng)用組件的skills配置中的uris數(shù)組存在一條數(shù)據(jù)[uri匹配]和[type匹配]需要均匹配成功,則匹配成功,否則匹配失敗。
最左uri匹配:當(dāng)配置文件待匹配應(yīng)用組件的skills配置中的uris數(shù)組中只配置scheme;或者只配置scheme和host;或者只配置scheme、host和port時(shí)。傳入want參數(shù)的uri的最左邊依次需要和scheme,或者scheme和host,或者scheme、host和port都匹配,才滿足最左uri匹配。
圖3 want參數(shù)中uri和type皆不為空時(shí)的匹配規(guī)則
為了簡(jiǎn)化描述:
- 稱調(diào)用方傳入的want參數(shù)中的uri參數(shù)為w_uri;待匹配應(yīng)用組件的skills配置中uri為s_uri,其中每個(gè)元素為s_uri。
- 稱調(diào)用方傳入的want參數(shù)的type參數(shù)為w_type,待匹配應(yīng)用組件的skills數(shù)組中uris的type數(shù)據(jù)為s_type。
圖4 want參數(shù)中uri和type的具體匹配規(guī)則
uri匹配規(guī)則
具體的匹配規(guī)則如下:
- 如果s_uri的scheme為空,當(dāng)w_uri為空時(shí)匹配成功,否則匹配失敗。
- 如果s_uri的host為空,當(dāng)w_uri和s_uri的scheme相同時(shí)匹配成功,否則匹配失敗。
- 如果s_uri的port為空,當(dāng)w_uri和s_uri中的scheme和host相同時(shí)匹配成功,否則匹配失敗。
- 如果s_uri的path、pathStartWith和pathRegex都為空,當(dāng)w_uri和s_uri中的scheme,host和port相同時(shí)匹配成功,否則匹配失敗。
- 如果s_uri的path不為空,當(dāng)w_uri和s_uri全路徑表達(dá)式相同時(shí)匹配成功,否則繼續(xù)進(jìn)行pathStartWith的匹配。
- 如果s_uri的pathStartWith不為空,當(dāng)w_uri包含s_uri前綴表達(dá)式時(shí)匹配成功,否則繼續(xù)進(jìn)行pathRegex的匹配。
- 如果s_uri的pathRegex不為空,當(dāng)w_uri滿足s_uri正則表達(dá)式時(shí)匹配成功,否則匹配失敗。
說明:
待匹配應(yīng)用組件的skills配置的uris中scheme、host、port、path、pathStartWith和pathRegex屬性拼接,如果依次聲明了path、pathStartWith和pathRegex屬性時(shí),uris將分別拼接為如下三種表達(dá)式:
- 前綴uri表達(dá)式 :當(dāng)配置文件只配置scheme,或者只配置scheme和host,或者只配置scheme,host和port時(shí),參數(shù)傳入以配置文件為前綴的Uri
scheme://
scheme://host
scheme://host:port
- 全路徑表達(dá)式 :
scheme://host:port/path
- 前綴表達(dá)式 :
scheme://host:port/pathStartWith
- 正則表達(dá)式 :
scheme://host:port/pathRegex
系統(tǒng)應(yīng)用預(yù)留uri的scheme統(tǒng)一以
ohos
開頭,例如ohosclock://
。三方應(yīng)用組件配置的uri不能與系統(tǒng)應(yīng)用重復(fù),否則會(huì)導(dǎo)致無法通過該uri拉起三方應(yīng)用組件。
type匹配規(guī)則
說明:
本章節(jié)所述的type匹配規(guī)則的適用性需建立在want參數(shù)內(nèi)type不為空的基礎(chǔ)上。當(dāng)want參數(shù)內(nèi)type為空時(shí)請(qǐng)參見[want參數(shù)的uri和type匹配規(guī)則]。
具體的匹配規(guī)則如下:
- 如果s_type為空,則匹配失敗。
- 如果s_type或者w_type為通配符
*/*
,則匹配成功。 - 如果s_type最后一個(gè)字符為通配符
*
,如prefixType/*
,則當(dāng)w_type包含prefixType/
時(shí)匹配成功,否則匹配失敗。 - 如果w_type最后一個(gè)字符為通配符
*
,如prefixType/*
,則當(dāng)s_type包含prefixType/
時(shí)匹配成功,否則匹配失敗。
審核編輯 黃宇
-
框架
+關(guān)注
關(guān)注
0文章
404瀏覽量
17892 -
鴻蒙
+關(guān)注
關(guān)注
60文章
2618瀏覽量
44038
發(fā)布評(píng)論請(qǐng)先 登錄
鴻蒙Ability開發(fā)-Stage模型下Ability的創(chuàng)建和使用
OpenHarmony 3.1 Beta版本關(guān)鍵特性解析——探秘隱式查詢
HarmonyOS/OpenHarmony應(yīng)用開發(fā)-信息傳遞載體Want使用
HarmonyOS/OpenHarmony應(yīng)用開發(fā)-stage使用顯示Want啟動(dòng)Ability
HarmonyOS/OpenHarmony應(yīng)用開發(fā)-stage使用隱示Want打開網(wǎng)址
基于顯式與隱式反饋信息的矩陣分解
鴻蒙開發(fā)接口Ability框架:【@ohos.ability.wantConstant (wantConstant)】

鴻蒙應(yīng)用模型:【Ability Kit】簡(jiǎn)介

鴻蒙Ability Kit(程序框架服務(wù))【Ability內(nèi)頁面間的跳轉(zhuǎn)】

鴻蒙Ability Kit(程序框架服務(wù))【Ability與ServiceExtensionAbility通信】

鴻蒙Ability Kit(程序框架服務(wù))【應(yīng)用間使用Want分享數(shù)據(jù)】

鴻蒙開發(fā):信息傳遞載體Want

評(píng)論