智能客服
你问我答,随时在线为你解决问题

























从API 12开始,已不再推荐三方应用使用指定Ability方式(即显式Want)拉起其他应用,推荐通过指定应用链接的方式来实现。
本章节介绍如何从显式Want跳转切换到应用链接跳转。
将待跳转的应用安装到设备,在其对应UIAbility的module.json5配置文件中配置skills标签的entities字段、actions字段和uri字段:
- {
- "module": {
- // ...
- "abilities": [
- {
- // ...
- "skills": [
- {
- "entities": [
- "entity.system.browsable"
- ],
- "actions": [
- "ohos.want.action.viewData"
- ],
- "uris": [
- {
- "scheme": "https",
- "host": "www.example.com",
- }
- ],
- "domainVerify": true
- }
- ]
- }
- ]
- }
- }
调用方通过openLink接口执行跳转,在接口入参需要传入转换后的link和配置options, 不再传入bundleName、moduleName和abilityName。系统会根据传入的link匹配到符合skill配置的应用。
- import { common } from '@kit.AbilityKit';
- import OpenLinkOptions from '@ohos.app.ability.OpenLinkOptions';
- import { BusinessError } from '@ohos.base';
- import hilog from '@ohos.hilog';
-
- const TAG: string = '[UIAbilityComponentsOpenLink]';
- const DOMAIN_NUMBER: number = 0xFF00;
-
- @Entry
- @Component
- struct Index {
- build() {
- Button('start link', { type: ButtonType.Capsule, stateEffect: true })
- .width('87%')
- .height('5%')
- .margin({ bottom: '12vp' })
- .onClick(() => {
- let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
- // 通过startAbility接口显式启动其他UIAbility,推荐使用openLink接口。
- // let want: Want = {
- // bundleName: "com.test.example",
- // moduleName: "entry",
- // abilityName: "EntryAbility"
- // };
- // try {
- // context.startAbility(want)
- // .then(() => {
- // hilog.info(DOMAIN_NUMBER, TAG, 'startAbility success.');
- // }).catch((err: BusinessError) => {
- // hilog.error(DOMAIN_NUMBER, TAG, `startAbility failed. Code is ${err.code}, message is ${err.message}`);
- // })
- // } catch (paramError) {
- // hilog.error(DOMAIN_NUMBER, TAG, `Failed to startAbility. Code is ${paramError.code}, message is ${paramError.message}`);
- // }
- let link: string = "https://www.example.com";
- let openLinkOptions: OpenLinkOptions = {
- // 匹配的abilities选项是否需要通过AppLinking域名校验,匹配到唯一配置过的应用ability
- appLinkingOnly: true,
- // 同want中的parameter,用于传递的参数
- parameters: {demo_key: "demo_value"}
- };
-
- try {
- context.openLink(link, openLinkOptions)
- .then(() => {
- hilog.info(DOMAIN_NUMBER, TAG, 'open link success.');
- }).catch((err: BusinessError) => {
- hilog.error(DOMAIN_NUMBER, TAG, `open link failed. Code is ${err.code}, message is ${err.message}`);
- })
- } catch (paramError) {
- hilog.error(DOMAIN_NUMBER, TAG, `Failed to start link. Code is ${paramError.code}, message is ${paramError.message}`);
- }
- })
- }
- }
将待跳转的应用安装到设备,在其对应UIAbility的module.json5配置文件中配置skills标签的entities字段、actions字段和uri字段:
- {
- "module": {
- // ...
- "abilities": [
- {
- // ...
- "skills": [
- {
- "entities": [
- "entity.system.browsable"
- ],
- "actions": [
- "ohos.want.action.viewData"
- ],
- "uris": [
- {
- "scheme": "https",
- "host": "www.example.com",
- }
- ],
- "domainVerify": true
- }
- ]
- }
- ]
- }
- }
调用方通过openLink接口执行跳转,在接口入参需要传入转换后的link和配置options, 不再传入bundleName、moduleName和abilityName。系统会根据传入的link匹配到符合skills配置的应用。AbilityResult回调结果返回通过入参传入回调函数,在启动ability停止自身后返回给调用方的信息。启动成功和失败结果仍通过Promise返回。
- import { common } from '@kit.AbilityKit';
- import OpenLinkOptions from '@ohos.app.ability.OpenLinkOptions';
- import { BusinessError } from '@ohos.base';
- import hilog from '@ohos.hilog';
-
- const TAG: string = '[UIAbilityComponentsOpenLink]';
- const DOMAIN_NUMBER: number = 0xFF00;
-
- @Entry
- @Component
- struct Index {
- build() {
- Button('start link', { type: ButtonType.Capsule, stateEffect: true })
- .width('87%')
- .height('5%')
- .margin({ bottom: '12vp' })
- .onClick(() => {
- let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
- // 通过startAbility接口显式启动其他UIAbility,推荐使用openLink接口。
- // let want: Want = {
- // bundleName: "com.test.example",
- // moduleName: "entry",
- // abilityName: "EntryAbility"
- // };
- // try {
- // context.startAbilityForResult(want)
- // .then((data) => {
- // hilog.info(DOMAIN_NUMBER, TAG, 'startAbility success. data:' + JSON.stringify(data));
- // }).catch((err: BusinessError) => {
- // hilog.error(DOMAIN_NUMBER, TAG, `startAbility failed. Code is ${err.code}, message is ${err.message}`);
- // })
- // } catch (paramError) {
- // hilog.error(DOMAIN_NUMBER, TAG, `Failed to startAbility. Code is ${paramError.code}, message is ${paramError.message}`);
- // }
- let link: string = "https://www.example.com";
- let openLinkOptions: OpenLinkOptions = {
- // 匹配的abilities选项是否需要通过AppLinking域名校验,匹配到唯一配置过的应用ability
- appLinkingOnly: true,
- // 同want中的parameter,用于传递的参数
- parameters: {demo_key: "demo_value"}
- };
-
- try {
- context.openLink(link, openLinkOptions, (err, data) => {
- // AbilityResult callback回调,仅在被拉起ability死亡时触发
- hilog.info(DOMAIN_NUMBER, TAG, 'open link success. Callback result:' + JSON.stringify(data));
- }).then(() => {
- hilog.info(DOMAIN_NUMBER, TAG, 'open link success.');
- }).catch((err: BusinessError) => {
- hilog.error(DOMAIN_NUMBER, TAG, `open link failed. Code is ${err.code}, message is ${err.message}`);
- })
- } catch (paramError) {
- hilog.error(DOMAIN_NUMBER, TAG, `Failed to start link. Code is ${paramError.code}, message is ${paramError.message}`);
- }
- })
- }
- }
智能客服
你问我答,随时在线为你解决问题
合作咨询
我们的专家服务团队将竭诚为您提供专业的合作咨询服务
解决方案
精准高效的一站式服务支持,助力开发者商业成功