请教各位大侠,如何通过HarmonyOS拉起一个应用?

请教各位大侠,如何通过HarmonyOS拉起一个应用?


HarmonyOS
鸿蒙
5天前
92浏览
收藏 0
回答 3
已解决
回答 3
按赞同
/
按时间
知识浅谈

当已知目标应用的Bundle NameAbility Name时,直接通过组件名拉起。

// 导入模块
import common from '@ohos.app.ability.common';

// 在Ability的上下文中构建Intent
let context: common.UIAbilityContext = this.context; // 当前Ability的上下文

// 配置Intent参数
let wantInfo = {
    deviceId: "", // 空字符串表示当前设备
    bundleName: "com.example.targetapp", // 目标应用的Bundle Name
    abilityName: "com.example.targetapp.MainAbility", // 目标Ability的全类名
    parameters: { // 可选:传递参数
        key1: "value1",
        key2: 100
    }
};

try {
    // 启动目标Ability
    context.startAbility(wantInfo).then(() => {
        console.log("启动成功");
    }).catch((err) => {
        console.error("启动失败: " + JSON.stringify(err));
    });
} catch (error) {
    console.error("捕获异常: " + JSON.stringify(error));
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
分享
微博
QQ
微信
回复
5天前
waylau

应用链接 应用链接是指可以将用户引导至应用内特定位置或相关网页的URL,常见的格式如下。

AI检测代码解析 scheme://host[:port]/path 1. 应用链接运作机制如下。

目标应用在配置文件中注册自己的URL,并对外提供URL。 拉起方应用在跳转接口中传入目标应用的URL等信息。 系统接收到URL等相关信息,会寻找对应匹配项,并跳转至目标应用。 应用链接分类 按照应用链接的scheme以及校验机制的不同,可以分为Deep Linking与App Linking两种方式。

Deep Linking:是一种通过链接跳转至应用特定页面的技术,其特点是支持开发者定义任意形式的scheme。由于缺乏域名校验机制,容易被其他应用所仿冒。 App Linking:其限定了scheme必须为https,同时通过增加域名校验机制,可以从已匹配到的应用中筛选过滤出目标应用,消除应用查询和定位中产生的歧义,直达受信的目标应用。


详见 ​​https://blog.51cto.com/u_9427273/13529709​

分享
微博
QQ
微信
回复
5天前
Harmony魔法师


1. 显式拉起其他应用(如支付宝) 通过指定目标应用的 ​​bundleName​​​ 和 ​​abilityName​​​,可以直接拉起其指定的 Ability。若应用未安装,可通过 ​​FLAG_INSTALL_ON_DEMAND​​ 尝试触发安装(需设备支持)。

示例代码(ArkTS):

import common from '@ohos.app.ability.common';
import wantConstant from '@ohos.app.ability.wantConstant';

async onBundleNameAliPay() {
  const context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; // 获取上下文
  let want = {
    deviceId: '',              // 空表示本机
    bundleName: 'com.alipay.mobile.client', // 目标应用包名
    abilityName: 'EntryAbility',           // 目标 Ability 名称
    flags: wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, // 未安装时尝试安装
    parameters: {              // 自定义参数(可选)
      key1: "value1"
    }
  };

  try {
    const res = await context.startAbility(want);
    AlertDialog.show({ message: `启动成功: ${JSON.stringify(res, null, 2)}` });
  } catch (err) {
    console.error("启动失败: ", JSON.stringify(err));
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.

关键点:

  • FLAG_INSTALL_ON_DEMAND​:触发应用安装逻辑(需设备集成应用市场服务)。
  • parameters​:可向目标 Ability 传递自定义参数。
  • 错误处理:必须捕获​​startAbility​​ 的异常(如应用未安装或权限不足)。

2. 通过深度链接(DeepLink)拉起应用 使用 URI Scheme(如支付宝的 ​​alipays://​​)可直接唤起应用特定页面,适用于网页跳转或跨平台场景。

示例代码(ArkTS):

import common from '@ohos.app.ability.common';

onOpenLinkAliPay() {
  const context = getContext(this) as common.UIAbilityContext;
  const link = 'alipays://platformapi/startApp?appId=10000007&qrcode=xxx'; // 支付宝深度链接
  
  const openLinkOptions = {
    appLinkingOnly: false,     // 是否仅允许应用关联的链接
    parameters: {              // 附加参数(可选)
      demo_key: 'demo_value'   
    }
  };

  // 异步回调处理
  context.openLink(link, openLinkOptions, (err, result) => {
    if (err) {
      console.error("链接打开失败: ", JSON.stringify(err));
      return;
    }
    console.info("结果码: ", result.resultCode);
    console.info("回调数据: ", JSON.stringify(result.want));
  }).then(() => {
    console.info("链接调用成功");
  }).catch((err: BusinessError) => {
    console.error("链接调用失败: ", err.code);
  });
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.

关键点:

  • URI Scheme 格式:需与目标应用声明的​​scheme​​ 匹配(如支付宝为​​alipays​​)。
  • openLinkOptions​:
  • ​appLinkingOnly: true​​ 时仅拉起已关联应用,​​false​​ 允许用户选择其他应用打开。
  • 回调处理:通过异步回调获取执行结果(成功/失败码及数据)。

4. 两种方式的对比

方式

​startAbility​

​openLink​

适用场景

明确知道目标应用的包名和 Ability 名称

通过 URI Scheme 跳转(如网页跳转)

参数传递

通过 ​​parameters​​ 字段

通过 URL 参数或 ​​parameters​​ 附加

安装处理

支持 ​​FLAG_INSTALL_ON_DEMAND​

依赖系统默认处理

回调粒度

返回简单结果

支持详细回调(成功/失败码、数据)

注意事项

  1. 兼容性:​​FLAG_INSTALL_ON_DEMAND​​ 需要 HarmonyOS 3.0+ 且设备支持应用市场。
  2. 权限申请:跨应用拉起需在​​module.json5​​ 的​​requestPermissions​​ 中声明权限。
  3. 错误处理:务必捕获​​startAbility​​ 和​​openLink​​ 的异常,防止应用崩溃。
  4. URI Scheme 冲突:多个应用注册相同 Scheme 时,系统会弹窗让用户选择。
分享
微博
QQ
微信
回复
5天前


相关问题
请教各位大侠,ohpm能单独安装吗?
85浏览 • 1回复 已解决
请教一个sql查询需求?
3026浏览 • 1回复 待解决
请教一个mysql问题有知道的吗?
2971浏览 • 1回复 待解决
关于liteos-a的些问题想请教各位
9449浏览 • 2回复 待解决
HarmonyOS 通过https地址拉起应用
369浏览 • 1回复 待解决
entry中如何拉起一个Module中的Ability
4849浏览 • 1回复 待解决
如何开发一个纯后台应用
2703浏览 • 1回复 待解决
如何通过DevEco新建一个js/ts的module?
5876浏览 • 1回复 待解决
如何创建一个ArkTS应用的项目?
957浏览 • 1回复 待解决