HarmonyOS的连接艺术之一:让应用之间无缝协作
本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的技术细节,基于实际开发实践进行总结。
主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。
本文为原创内容,任何形式的转载必须注明出处及原作者。
应用之间协作的需求越来越普遍。例如,你可能在浏览商品时需要打开地图查看店铺位置,或者在填写订单时需要填写收货地址。这种场景下,应用跳转功能就发挥了重要作用,它能够帮助用户在不同应用之间无缝切换,提升用户体验。
应用跳转的两种类型
HarmonyOS 提供了两种应用跳转方式:
1. 拉起指定应用:
这种类型的应用跳转最常见,就像你打开浏览器,然后点击链接跳转到其他网站一样。例如,你可以在购物 App 中点击“查看地图”按钮,然后系统就会自动打开地图 App 并跳转到店铺位置。这种方式的特点是目标应用明确,用户无需选择。
2. 拉起指定类型的应用:
这种类型的应用跳转类似于手机桌面上的应用图标分类,例如“导航类应用”、“金融类应用”等。当用户点击某个按钮时,系统会弹出一个应用面板,展示所有已安装的对应类型应用,用户可以选择其中一个打开。例如,你可以在某个 App 中点击“转账”按钮,然后系统会弹出一个金融应用面板,你可以选择其中一款银行 App 进行转账操作。
应用链接:连接应用的桥梁
应用链接是应用间跳转的基础,它就像一个网址,可以指向应用内的特定页面或功能。例如,一个音乐 App 可以提供一个链接,用户点击后可以直接跳转到播放列表页面。
应用链接的运作机制:
- 目标应用在配置文件中注册 URL skill: 目标应用需要在配置文件中声明它支持的 URL scheme、host 和 path 等信息,这样系统才能识别它。
- 拉起方应用在跳转接口中传入目标应用的 URL: 拉起方应用需要构建一个符合目标应用 URL skill 格式的链接,并传入相应的跳转接口。
- 系统根据 URL 匹配目标应用并跳转: 系统会根据 URL 中的 scheme、host 和 path 等信息,在已安装的应用中查找匹配项,并跳转到目标应用内的对应页面。
Deep Linking 与 App Linking 的对比
特性 | Deep Linking | App Linking |
---|---|---|
scheme | 自定义 | https |
域名校验 | 无 | 有 |
未安装应用处理 | 提示错误码 | 跳转到浏览器 |
适用范围 | API 12 及以上 | API 12 及以上 |
总结: | ||
应用跳转功能是 HarmonyOS 应用开发的重要特性,它能够帮助应用之间无缝协作,提升用户体验。开发者可以根据实际需求选择合适的跳转方式,并通过应用链接实现应用之间的连接。 |
举(N)个栗子
示例 1:使用 openLink 接口拉起地图应用
import { common } from '@ohos.app.ability.common';
export default class EntryAbility extends common.UIAbility {
onWindowStageCreate(windowStage: common.WindowStage) {
const context = this.getContext(this) as common.UIAbilityContext;
const link: string = "geo:37.7749,-122.4194"; // 地点坐标
context.openLink(link);
}
}
示例 2:使用 startAbility 接口拉起邮件应用并发送邮件
import { common } from '@ohos.app.ability.common';
import { wantConstant } from '@ohos.app.ability.common';
export default class EntryAbility extends common.UIAbility {
onWindowStageCreate(windowStage: common.WindowStage) {
const context = this.getContext(this) as common.UIAbilityContext;
const want: common.Want = {
action: 'ohos.want.action.sendToData',
uri: 'mailto:support@example.com?subject=App Feedback&body=Please describe your feedback here...',
flags: wantConstant.Flags.FLAG_AUTH_WRITE_URI_PERMISSION | wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION
};
context.startAbility(want);
}
}
示例 3:使用 Deep Linking 跳转到应用内的特定页面
import { common } from '@ohos.app.ability.common';
import { url } from '@ohos.arkts';
export default class EntryAbility extends common.UIAbility {
onCreate(want: common.Want, launchParam: common.LaunchParam) {
const uri = want?.uri;
if (uri) {
const urlObject = url.URL.parseURL(want.uri);
const action = urlObject.params.get('action');
if (action === "showall") {
// 跳转到应用内的“所有节目”页面
}
}
}
}
总结:
通过以上示例代码,我们可以看到应用跳转功能的强大之处。开发者可以根据实际需求选择合适的跳转方式,并通过应用链接实现应用之间的连接,为用户提供更加便捷和流畅的体验。