IT评测·应用市场-qidao123.com
标题:
鸿蒙OpenHarmony【使用Deep Linking实现应用间跳转】应用间跳转
[打印本页]
作者:
天津储鑫盛钢材现货供应商
时间:
2024-12-17 21:56
标题:
鸿蒙OpenHarmony【使用Deep Linking实现应用间跳转】应用间跳转
采用Deep Linking举行跳转时,系统会根据接口中传入的uri信息,在本地已安装的应用中寻找到符合条件的应用并举行拉起。当匹配到多个应用时,会拉起应用选择框。
实现原理
Deep Linking基于隐式Want匹配机制中的uri匹配来查询、拉起目标应用。
目标应用配置module.json5文件
为了能够支持被其他应用访问,目标应用必要在[module.json5配置文件]中配置[skills标签]。其中,uri字段的scheme的取值支持自界说,可以界说为恣意不包罗特别字符、非ohos开头的字符串。
分析:
Deep Linking中的scheme取值通常不为https、http、file,否则会拉起默认的系统浏览器。
配置示例如下:
{
"module": {
// ...
"abilities": [
{
// ...
"skills": [
{
"actions": [
// actions不能为空,actions为空会造成目标方匹配失败
"ohos.want.action.viewData"
],
"uris": [
{
// scheme必选,可以自定义,以link为例,需要替换为实际的scheme
"scheme": "link",
// host必选,配置待匹配的域名
"host": "www.example.com"
}
]
}
]
}
]
}
}
复制代码
拉起方应用实现应用跳转
下面通过三个案例,分别介绍怎样使用[openLink()]与[startAbility()]接口实现应用跳转,以及怎样在[Web组件]中实现应用跳转。
使用openLink实现应用跳转
在[openLink]接口的link字段中传入目标应用的URL信息,并将options字段中的appLinkingOnly配置为false。
示例代码如下:
import { common, OpenLinkOptions } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
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;
let link: string = "link://www.example.com";
let openLinkOptions: OpenLinkOptions = {
appLinkingOnly: false
};
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}`);
}
})
}
}
复制代码
使用startAbility实现应用跳转
[startAbility]接口是将应用链接放入want中,通过调用[隐式want匹配]的方法触发应用跳转。通过[startAbility]接口启动时,还必要调用方传入待匹配的action和entity。
示例代码如下:
import { common, Want } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
const TAG: string = '[UIAbilityComponentsOpenLink]';
const DOMAIN_NUMBER: number = 0xFF00;
@Entry
@Component
struct Index {
build() {
Button('start ability', { type: ButtonType.Capsule, stateEffect: true })
.width('87%')
.height('5%')
.margin({ bottom: '12vp' })
.onClick(() => {
let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
let want: Want = {
uri: "link://www.example.com"
};
try {
context.startAbility(want).then(() => {
hilog.info(DOMAIN_NUMBER, TAG, 'start ability success.');
}).catch((err: BusinessError) => {
hilog.error(DOMAIN_NUMBER, TAG, `start ability failed. Code is ${err.code}, message is ${err.message}`);
});
} catch (paramError) {
hilog.error(DOMAIN_NUMBER, TAG, `Failed to start ability. Code is ${paramError.code}, message is ${paramError.message}`);
}
})
}
}
复制代码
使用Web组件实现应用跳转
Web组件必要跳转DeepLink链接应用时,可通过拦截回调[onLoadIntercept]中对界说的事件举行处置惩罚,实现应用跳转。
示例代码如下:
// index.ets
import { webview } from '@kit.ArkWeb';
import { BusinessError } from '@kit.BasicServicesKit';
import { common } from '@kit.AbilityKit';
@Entry
@Component
struct WebComponent {
controller: webview.WebviewController = new webview.WebviewController();
build() {
Column() {
Web({ src: $rawfile('index.html'), controller: this.controller })
.onLoadIntercept((event) => {
const url: string = event.data.getRequestUrl();
if (url === 'link://www.example.com') {
(getContext() as common.UIAbilityContext).openLink(url)
.then(() => {
console.log('openLink success');
}).catch((err: BusinessError) => {
console.error('openLink failed, err:' + JSON.stringify(err));
});
return true;
}
// 返回true表示阻止此次加载,否则允许此次加载
return false;
})
}
}
}
复制代码
前端页面代码:
// index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<h1>Hello World</h1>
<!--方式一、通过绑定事件window.open方法实现跳转-->
<button class="doOpenLink" onclick="doOpenLink()">跳转其他应用一</button>
<!--方式二、通过超链接实现跳转-->
<a href="link://www.example.com">跳转其他应用二</a>
</body>
</html>
<script>
function doOpenLink() {
window.open("link://www.example.com")
}
</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企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4