HarmonyOS的连接艺术之二:精准控制目标应用

本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的技术细节,基于实际开发实践进行总结。

主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。

本文为原创内容,任何形式的转载必须注明出处及原作者。

在某些场景下,我们希望应用能够精准控制目标应用,例如打开地图应用查看特定地点,或者打开音乐 App 播放特定歌曲。HarmonyOS 提供了多种方式来实现这种类型的跳转,例如 openLink 接口、startAbility 接口和 Web 组件跳转等。

指定应用链接跳转

1. openLink 接口
openLink 接口是最常用的跳转方式,它可以将用户引导到目标应用的特定页面。例如,你可以在购物 App 中点击"查看地图"按钮,然后系统就会自动打开地图 App 并跳转到店铺位置。
openLink 接口参数说明

参数 类型 说明
link string 目标应用的 URL 链接
options object 选项参数,例如 appLinkingOnly、parameters 等

示例代码

scala 复制代码
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"; // 地点坐标
    const options: common.OpenLinkOptions = {
      appLinkingOnly: false // 允许使用 Deep Linking 跳转
    };
    context.openLink(link, options);
  }
}

2. startAbility 接口
startAbility 接口与 openLink 接口类似,但它提供了更多的选项参数,例如 abilityNamemoduleName 等,可以指定目标应用的 Ability 名称和模块名称。
startAbility 接口参数说明

参数 类型 说明
want common.Want 目标应用的 Want 对象,包含 action、uri、entities、actions、parameters 和 flags 等信息
options object 选项参数,例如 abilityName、moduleName 等

示例代码

scala 复制代码
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 want: common.Want = {
      action: 'ohos.want.action.viewData',
      uri: "geo:37.7749,-122.4194",
      entities: ["entity.system.browsable"],
      actions: ["ohos.want.action.viewData"]
    };
    context.startAbility(want);
  }
}

3. Web 组件跳转

Web 组件可以通过拦截 onLoadIntercept 回调来处理 Deep Linking 链接,实现应用跳转。
示例代码

typescript 复制代码
import { webview } from '@ohos.arkweb';
export default class WebComponent {
  controller: webview.WebviewController = new webview.WebviewController();
  build() {
    this.controller.onLoadIntercept((event) => {
      const url: string = event.data.getRequestUrl();
      if (url.startsWith("geo:")) {
        // 跳转到地图应用
      }
      return true; // 阻止页面加载
    });
  }
}

4. 指定 Ability 跳转 (API 11 及以前版本 )

在 API 11 及以前版本,可以使用显式 Want 拉起其他应用,但这种方式在 API 12 及以上版本已不再支持。
示例代码

scala 复制代码
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 want: common.Want = {
      bundleName: "com.example.demo",
      moduleName: "entry",
      abilityName: "EntryAbility"
    };
    context.startAbility(want);
  }
}

举(N)个栗子

示例 1:使用 openLink 接口打开浏览器

scala 复制代码
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 = "https://www.example.com";
    const options: common.OpenLinkOptions = {
      appLinkingOnly: false // 允许使用 Deep Linking 跳转
    };
    context.openLink(link, options);
  }
}

示例 2:使用 startAbility 接口打开计算器应用

scala 复制代码
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 want: common.Want = {
      action: 'ohos.want.action.viewData',
      uri: "calculator",
      entities: ["entity.system.browsable"],
      actions: ["ohos.want.action.viewData"]
    };
    context.startAbility(want);
  }
}

示例 3:使用 Web 组件打开天气应用

typescript 复制代码
import { webview } from '@ohos.arkweb';
export default class WebComponent {
  controller: webview.WebviewController = new webview.WebviewController();
  build() {
    this.controller.onLoadIntercept((event) => {
      const url: string = event.data.getRequestUrl();
      if (url.startsWith("weather:")) {
        // 跳转到天气应用
      }
      return true; // 阻止页面加载
    });
  }
}

总结

拉起指定应用是应用间跳转的重要方式,它能够精准控制目标应用,实现特定的功能,实际开发中可以根据实际需求选择合适的跳转方式。

相关推荐
aqi007 小时前
鸿蒙版本的JSBridge兼容与安卓配套的H5啦
android·华为·harmonyos·鸿蒙·移动应用
熊猫钓鱼>_>7 小时前
Flutter app_settings 鸿蒙适配实战:Intent 体系到 Want 的跨越
flutter·华为·harmonyos·openharmony·intent·want
贾伟康10 小时前
【句匠|20】HarmonyOS ArkTS AppGallery 发布复查实战:核对包名、版本、设备、素材和离线声明
harmonyos·arkts·应用上架·appgallery·发布审核
贾伟康11 小时前
【句匠|15】HarmonyOS ArkTS 本地状态持久化实战:让保存、删除和页面返回后的数据即时一致
harmonyos·arkts·数据持久化·appstorage·preferences
贾伟康14 小时前
【句匠|16】HarmonyOS ArkTS 多设备布局实战:适配手机、平板和 PC/2in1 的窗口变化
harmonyos·arkts·arkui·响应式布局·多设备适配
小雨青年14 小时前
【HarmonyOS 7 平行视界深度实战】03 购物模式怎么实现连续浏览和左右推挤
华为·harmonyos
SuperHeroWu716 小时前
HarmonyOS Dev Assistant (HarmonyOS开发助手)如何打通元服务开发全流程
ai·agent·harmonyos·vs code·元服务·hbuilderx·assistant
熊猫钓鱼>_>16 小时前
用 OHAudioSuite 空间渲染节点搭一座「3D 有声博物馆」——从三种模式到 FreeBuds 头追的实战记录
c++·3d·ai·harmonyos·arkts·audio·ohaudiosuite
OH_TPC17 小时前
HarmonyOS APP开发---"心动卡"社交匹配App,需要用到这个库
harmonyos
光锥智能17 小时前
HUAWEI WATCH 6系列正式发布:鸿蒙AI手表,智慧健康旗舰
人工智能·华为·harmonyos