本文旨在深入探讨华为鸿蒙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") { // 跳转到应用内的“所有节目”页面 } } } }
总结:
通过以上示例代码,我们可以看到应用跳转功能的强大之处。我们开发者可以根据实际需求选择合适的跳转方式,并通过应用链接实现应用之间的连接,为用户提供更加便捷和流畅的体验。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。