鸿蒙OpenHarmony【使用Deep Linking实现应用间跳转】应用间跳转 ...

打印 上一主题 下一主题

主题 801|帖子 801|积分 2403

采用Deep Linking举行跳转时,系统会根据接口中传入的uri信息,在本地已安装的应用中寻找到符合条件的应用并举行拉起。当匹配到多个应用时,会拉起应用选择框。
实现原理

Deep Linking基于隐式Want匹配机制中的uri匹配来查询、拉起目标应用。
目标应用配置module.json5文件

为了能够支持被其他应用访问,目标应用必要在[module.json5配置文件]中配置[skills标签]。其中,uri字段的scheme的取值支持自界说,可以界说为恣意不包罗特别字符、非ohos开头的字符串。
   分析:
  Deep Linking中的scheme取值通常不为https、http、file,否则会拉起默认的系统浏览器。
  配置示例如下:
  1. {
  2.   "module": {
  3.     // ...
  4.     "abilities": [
  5.       {
  6.         // ...
  7.         "skills": [
  8.           {
  9.             "actions": [
  10.               // actions不能为空,actions为空会造成目标方匹配失败
  11.               "ohos.want.action.viewData"
  12.             ],
  13.             "uris": [
  14.               {
  15.                 // scheme必选,可以自定义,以link为例,需要替换为实际的scheme
  16.                 "scheme": "link",
  17.                 // host必选,配置待匹配的域名
  18.                 "host": "www.example.com"
  19.               }
  20.             ]
  21.           }
  22.         ]
  23.       }
  24.     ]
  25.   }
  26. }
复制代码
拉起方应用实现应用跳转

下面通过三个案例,分别介绍怎样使用[openLink()]与[startAbility()]接口实现应用跳转,以及怎样在[Web组件]中实现应用跳转。
使用openLink实现应用跳转

在[openLink]接口的link字段中传入目标应用的URL信息,并将options字段中的appLinkingOnly配置为false。
示例代码如下:
  1. import { common, OpenLinkOptions } from '@kit.AbilityKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. import { hilog } from '@kit.PerformanceAnalysisKit';
  4. const TAG: string = '[UIAbilityComponentsOpenLink]';
  5. const DOMAIN_NUMBER: number = 0xFF00;
  6. @Entry
  7. @Component
  8. struct Index {
  9.   build() {
  10.     Button('start link', { type: ButtonType.Capsule, stateEffect: true })
  11.       .width('87%')
  12.       .height('5%')
  13.       .margin({ bottom: '12vp' })
  14.       .onClick(() => {
  15.         let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
  16.         let link: string = "link://www.example.com";
  17.         let openLinkOptions: OpenLinkOptions = {
  18.           appLinkingOnly: false
  19.         };
  20.         try {
  21.           context.openLink(link, openLinkOptions)
  22.             .then(() => {
  23.               hilog.info(DOMAIN_NUMBER, TAG, 'open link success.');
  24.             }).catch((err: BusinessError) => {
  25.               hilog.error(DOMAIN_NUMBER, TAG, `open link failed. Code is ${err.code}, message is ${err.message}`);
  26.             });
  27.         } catch (paramError) {
  28.           hilog.error(DOMAIN_NUMBER, TAG, `Failed to start link. Code is ${paramError.code}, message is ${paramError.message}`);
  29.         }
  30.       })
  31.   }
  32. }
复制代码
使用startAbility实现应用跳转

[startAbility]接口是将应用链接放入want中,通过调用[隐式want匹配]的方法触发应用跳转。通过[startAbility]接口启动时,还必要调用方传入待匹配的action和entity。
示例代码如下:
  1. import { common, Want } from '@kit.AbilityKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. import { hilog } from '@kit.PerformanceAnalysisKit';
  4. const TAG: string = '[UIAbilityComponentsOpenLink]';
  5. const DOMAIN_NUMBER: number = 0xFF00;
  6. @Entry
  7. @Component
  8. struct Index {
  9.   build() {
  10.     Button('start ability', { type: ButtonType.Capsule, stateEffect: true })
  11.       .width('87%')
  12.       .height('5%')
  13.       .margin({ bottom: '12vp' })
  14.       .onClick(() => {
  15.         let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
  16.         let want: Want = {
  17.             uri: "link://www.example.com"
  18.         };
  19.         try {
  20.           context.startAbility(want).then(() => {
  21.             hilog.info(DOMAIN_NUMBER, TAG, 'start ability success.');
  22.           }).catch((err: BusinessError) => {
  23.             hilog.error(DOMAIN_NUMBER, TAG, `start ability failed. Code is ${err.code}, message is ${err.message}`);
  24.           });
  25.         } catch (paramError) {
  26.           hilog.error(DOMAIN_NUMBER, TAG, `Failed to start ability. Code is ${paramError.code}, message is ${paramError.message}`);
  27.         }
  28.       })
  29.   }
  30. }
复制代码
使用Web组件实现应用跳转

Web组件必要跳转DeepLink链接应用时,可通过拦截回调[onLoadIntercept]中对界说的事件举行处置惩罚,实现应用跳转。
示例代码如下:
  1. // index.ets
  2. import { webview } from '@kit.ArkWeb';
  3. import { BusinessError } from '@kit.BasicServicesKit';
  4. import { common } from '@kit.AbilityKit';
  5. @Entry
  6. @Component
  7. struct WebComponent {
  8.   controller: webview.WebviewController = new webview.WebviewController();
  9.   build() {
  10.     Column() {
  11.       Web({ src: $rawfile('index.html'), controller: this.controller })
  12.         .onLoadIntercept((event) => {
  13.           const url: string = event.data.getRequestUrl();
  14.           if (url === 'link://www.example.com') {
  15.             (getContext() as common.UIAbilityContext).openLink(url)
  16.               .then(() => {
  17.                 console.log('openLink success');
  18.               }).catch((err: BusinessError) => {
  19.                 console.error('openLink failed, err:' + JSON.stringify(err));
  20.               });
  21.             return true;
  22.           }
  23.           // 返回true表示阻止此次加载,否则允许此次加载
  24.           return false;
  25.         })
  26.     }
  27.   }
  28. }
复制代码
前端页面代码:
  1. // index.html
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5.     <meta charset="UTF-8">
  6. </head>
  7. <body>
  8. <h1>Hello World</h1>
  9. <!--方式一、通过绑定事件window.open方法实现跳转-->
  10. <button class="doOpenLink" onclick="doOpenLink()">跳转其他应用一</button>
  11. <!--方式二、通过超链接实现跳转-->
  12. <a href="link://www.example.com">跳转其他应用二</a>
  13. </body>
  14. </html>
  15. <script>
  16.     function doOpenLink() {
  17.         window.open("link://www.example.com")
  18.     }
  19. </script>
复制代码
到这里我们就基本上学完一个简单的技能,当然假如说要真正参与到鸿蒙的开发当中,要学的还有很多。各人可以看看下面这个鸿蒙入门到实战的学习技能路线图:

而随着鸿蒙的火热,现阶段已有许多Android、前端等开发者看中其未来趋势;想从网上查阅学习,但搜刮到的鸿蒙资料都是七零八碎的,对此为了避免各人在学习过程中浪费过多时间,特地根据鸿蒙官方发布文档联合华为内部职员的分享,颠末反复修改整理得出:
整套鸿蒙(HarmonyOS NEXT)笔记(共计1236页)与鸿蒙(HarmonyOS NEXT)开发入门&实战视频(200集+)。
内容包罗了:(ArkTS、ArkUI、Stage模子、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技能、Napi组件、OpenHarmony内核、鸿蒙南向开发、鸿蒙项目实战)等技能知识点。《鸿蒙 (HarmonyOS NEXT)开发入门文件&实战视频》←全部嗱到资助各人在学习鸿蒙路上少走弯路!

现在的鸿蒙生态建设非常迅速;就目前,鸿蒙生态设备数已超过8亿台,200多万开发者投入到鸿蒙生态,涵盖资讯、金融、交际、影音等浩繁领域。鸿蒙爆火的背后是举国支持,彰显了国家对科技崛起的期望,自立自强不再受国外技能的打压。
并且鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用。那么这么多的应用必要开发,也就意味着必要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

天津储鑫盛钢材现货供应商

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表