提交 f5db12bf 编写于 作者: zyjhandsome's avatar zyjhandsome

重构《使用隐式Want打开网址》章节内容

Signed-off-by: zyjhandsome's avatarzyjhandsome <zyjhandsome@126.com>
上级 860bedd4
# 使用显式Want启动Ability # 使用显式Want启动Ability
在应用使用场景中,当用户在应用内点击某个按钮时,经常需要拉起指定UIAbility组件来完成某些特定任务。在启动UIAbility时,指定了abilityName和bundleName参数,可以使用显式Want方式启动UIAbility。显式Want的使用
在应用使用场景中,当用户在应用内点击某个按钮时,经常需要拉起指定UIAbility组件来完成某些特定任务。在启动UIAbility时,指定了abilityName和bundleName参数,可以使用显示Want方式启动UIAbility。显示Want的使用请参见[启动应用内的UIAbility](uiability-intra-device-interaction.md#启动应用内的uiability) 针对应用的特定任务,用户需要通过点击应用内的按钮来启动指定的UIAbility组件。在启动UIAbility时,需要提供abilityName和bundleName参数,并使用显式Want方式来启动。关于如何使用显式Want方式启动应用内的UIAbility,请参见[启动应用内的UIAbility](uiability-intra-device-interaction.md#启动应用内的uiability)
# 使用隐式Want打开网址 # 使用隐式Want打开网址
以打开浏览器为例,假设设备上安装了一个或多个浏览器应用。为了使浏览器应用能够正常工作,需要在[module.json5配置文件](../quick-start/module-configuration-file.md)进行配置,具体配置如下:
## 前提条件
设备上安装了一个或多个浏览器。
浏览器应用中通过module.json5配置如下:
```json ```json
"skills": [ {
{ "module": {
"entities": [ // ...
"entity.system.browsable" "abilities": [
// ...
],
"actions": [
"ohos.want.action.viewData"
// ...
],
"uris": [
{
"scheme": "https",
"host": "www.test.com",
"port": "8080",
// prefix matching
"pathStartWith": "query",
"type": "text/*"
},
{ {
"scheme": "http",
// ... // ...
"skills": [
{
"entities": [
"entity.system.home",
"entity.system.browsable"
// ...
],
"actions": [
"action.system.home",
"ohos.want.action.viewData"
// ...
],
"uris": [
{
"scheme": "https",
"host": "www.test.com",
"port": "8080",
// prefix matching
"pathStartWith": "query",
"type": "text/*"
},
{
"scheme": "http",
// ...
}
// ...
]
}
]
} }
// ...
] ]
}, }
] }
``` ```
在调用方UIAbility中,使用隐式Want方式启动浏览器应用。
## 开发步骤 ```ts
import common from '@ohos.app.ability.common';
1. 在自定义函数implicitStartAbility内使用**隐式Want**启动Ability。 function implicitStartAbility() {
let context = getContext(this) as common.UIAbilityContext;
```ts let wantInfo = {
async implicitStartAbility() { // uncomment line below if wish to implicitly query only in the specific bundle.
try { // bundleName: "com.example.myapplication",
let want = { "action": "ohos.want.action.viewData",
// uncomment line below if wish to implicitly query only in the specific bundle. // entities can be omitted.
// bundleName: "com.example.myapplication", "entities": ["entity.system.browsable"],
"action": "ohos.want.action.viewData", "uri": "https://www.test.com:8080/query/student",
// entities can be omitted. "type": "text/plain"
"entities": [ "entity.system.browsable" ], }
"uri": "https://www.test.com:8080/query/student", context.startAbility(wantInfo).then(() => {
"type": "text/plain" // ...
} }).catch((err) => {
let context = getContext(this) as common.UIAbilityContext; // ...
await context.startAbility(want) })
console.info(`explicit start ability succeed`) }
} catch (error) { ```
console.info(`explicit start ability failed with ${error.code}`)
}
}
```
匹配过程如下:
1. want内action不为空,且被skills内action包括,匹配成功。
2. want内entities不为空,且被skills内entities包括,匹配成功。
3. skills内uris拼接为`https://www.test.com:8080/query*` (\*为通配符)包含want内uri,匹配成功。
4. want内type不为空,且被skills内type包含,匹配成功。 匹配过程分析:
2. 当有多个匹配应用时,会被应用选择器展示给用户进行选择。 1. 调用方传入的want参数的action不为空,待匹配Ability的skills配置中的actions不为空且包含调用方传入的want参数的action,action匹配成功。
2. 调用方传入的want参数的entities不为空,待匹配Ability的skills配置中的entities不为空且包含调用方传入的want参数的entities,entities匹配成功。
3. 待匹配Ability的skills配置中内uris拼接为`https://www.test.com:8080/query*` (其中*表示通配符),包含调用方传入的want参数的uri,uri匹配成功。
4. 调用方传入的want参数的type不为空,待匹配Ability的skills配置中的type不为空且包含调用方传入的want参数的type,type匹配成功。
![stage-want1](figures/stage-want1.png) 当有多个匹配应用时,会被应用选择器展示给用户进行选择。 示意效果如下图所示。
<img src="figures/ability-startup-with-implicit-want1.png" height="600" />
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册