HarmonyOS的连接艺术之一:让应用之间无缝协作

本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的技术细节,基于实际开发实践进行总结。
主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。
本文为原创内容,任何形式的转载必须注明出处及原作者。

应用之间协作的需求越来越普遍。例如,你可能在浏览商品时需要打开地图查看店铺位置,或者在填写订单时需要填写收货地址。这种场景下,应用跳转功能就发挥了重要作用,它能够帮助用户在不同应用之间无缝切换,提升用户体验。

应用跳转的两种类型

HarmonyOS 提供了两种应用跳转方式:
1. 拉起指定应用
这种类型的应用跳转最常见,就像你打开浏览器,然后点击链接跳转到其他网站一样。例如,你可以在购物 App 中点击“查看地图”按钮,然后系统就会自动打开地图 App 并跳转到店铺位置。这种方式的特点是目标应用明确,用户无需选择。
2. 拉起指定类型的应用
这种类型的应用跳转类似于手机桌面上的应用图标分类,例如“导航类应用”、“金融类应用”等。当用户点击某个按钮时,系统会弹出一个应用面板,展示所有已安装的对应类型应用,用户可以选择其中一个打开。例如,你可以在某个 App 中点击“转账”按钮,然后系统会弹出一个金融应用面板,你可以选择其中一款银行 App 进行转账操作。

应用链接:连接应用的桥梁

应用链接是应用间跳转的基础,它就像一个网址,可以指向应用内的特定页面或功能。例如,一个音乐 App 可以提供一个链接,用户点击后可以直接跳转到播放列表页面。
应用链接的运作机制

  1. 目标应用在配置文件中注册 URL skill: 目标应用需要在配置文件中声明它支持的 URL scheme、host 和 path 等信息,这样系统才能识别它。
  2. 拉起方应用在跳转接口中传入目标应用的 URL: 拉起方应用需要构建一个符合目标应用 URL skill 格式的链接,并传入相应的跳转接口。
  3. 系统根据 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") {
        // 跳转到应用内的“所有节目”页面
      }
    }
  }
}

总结
通过以上示例代码,我们可以看到应用跳转功能的强大之处。开发者可以根据实际需求选择合适的跳转方式,并通过应用链接实现应用之间的连接,为用户提供更加便捷和流畅的体验。

posted @ 2024-10-20 10:21  SameX  阅读(25)  评论(0编辑  收藏  举报