HarmonyOS鸿蒙Next应用开发判断目标应用是否已安装,并提供常见schemes分享

HarmonyOS鸿蒙Next应用开发判断目标应用是否已安装,并提供常见schemes分享

鸿蒙应用开发判断目标应用是否已安装,并提供常见schemes分享

3 回复

一、结论

在鸿蒙中判断应用是否已安全,只是通过包名是无法判断应用安装与否。在鸿蒙里新增了一种判断应用安装的工具方法,即:canOpenLink。

使用该工具函数的前提是,本应用配置了查询标签querySchemes,并且目标应用设置了skills-uris后,会有link完成的串儿,例如:targetAppxx://test.example.com/open

所以需要知道目标方应用是否安装,需要知道对方完整的link串才行。

二、代码实现和详细解释

cke_1627.png

{
  "module": {
    "querySchemes": [
      "targetAPPxx" // 替换为目标应用的scheme
    ]
  }
}

判断安装与否代码示例:

import { hilog } from '@kit.PerformanceAnalysisKit';
import { bundleManager } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct Index {

  onClickCheckApp = ()=>{
    this.canOpenApp();
  }

  private canOpenApp(){
    try {
      let link = 'targetAPPxx://test.example.com/open'; // 替换成你目标应用的link串儿
      let canOpen = bundleManager.canOpenLink(link);
      hilog.info(0x0000, 'testTag', 'canOpenLink successfully: %{public}s', JSON.stringify(canOpen));
    } catch (err) {
      let message = (err as BusinessError).message;
      hilog.error(0x0000, 'testTag', 'canOpenLink failed: %{public}s', message);
    }
  }

  build() {
    RelativeContainer() {
      Text("点击检查是否安装")
        .id('IndexHelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
        .onClick(this.onClickCheckApp)
    }
    .height('100%')
    .width('100%')
  }
}

目标应用设置

所以link串儿是由 scheme://host/pathStartWith 组成。例如:targetAppxx://test.example.com/open

cke_1079.png

{
  "module": {
    //...
    "abilities": [
      {
        //...
        "skills": [
          {
            "uris": [
              {
                "scheme": "targetAppxx",
                "host": "test.example.com",
                "pathStartWith": "oepn"
              }
            ]
          }
        ]
      }
    ]
  } 
}

注意

  1. 兼容性:不同版本的应用可能会有 Scheme 变更,建议在实际使用时进行测试。
  2. 参数传递:许多 Scheme 支持携带参数,例如 alipay://platformapi/startapp?appId=20000067 可以直接打开支付宝的扫一扫功能。
  3. 应用检测:在调用 canOpenLink 后,建议先判断返回值,确认应用存在后再执行跳转操作。

下面提供一些常见知名应用的 Scheme 列表:

社交类

  • 微信weixin://
  • QQmqq://
  • 微博sinaweibo://
  • 钉钉dingtalk://

出行类

  • 高德地图amapuri://
  • 百度地图baidumap://
  • 腾讯地图qqmap://
  • 滴滴出行didi://

购物类

  • 淘宝taobao://
  • 天猫tmall://
  • 京东openapp.jdmoble://
  • 拼多多pinduoduo://

生活类

  • 支付宝alipay://
  • 美团imeituan://
  • 饿了么eleme://
  • 抖音snssdk1128://douyin://
  • 快手kwai://

视频类

  • 腾讯视频tenvideo://
  • 爱奇艺iqiyi://
  • 优酷youku://

工具类

  • 浏览器http://https://
  • 系统设置settings://

更多关于HarmonyOS鸿蒙Next应用开发判断目标应用是否已安装,并提供常见schemes分享的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,使用bundleManager.getBundleInfoForSelf()bundleManager.getApplicationInfo()检查应用安装状态。通过wantAgentWant对象配置uriaction来启动应用。常见schemes包括电话tel:、短信smsto:、邮件mailto:、网页https:及地图geo:

在HarmonyOS Next应用开发中,判断目标应用是否已安装,可以通过查询应用信息来实现。以下是核心方法及常见schemes分享:

一、判断应用是否安装

使用@ohos.bundle.bundleManager模块的bundleManager.getApplicationInfo()方法。此方法尝试获取目标应用的ApplicationInfo,若成功则应用已安装,若失败(抛出错误)则未安装。

关键代码示例:

import bundleManager from '@ohos.bundle.bundleManager';
import { BusinessError } from '@ohos.base';

async function checkAppInstalled(bundleName: string): Promise<boolean> {
  try {
    await bundleManager.getApplicationInfo(bundleName, 0, 100);
    console.info(`应用 ${bundleName} 已安装`);
    return true;
  } catch (error) {
    console.info(`应用 ${bundleName} 未安装`);
    return false;
  }
}

// 使用示例:检查微信是否安装
let isWeChatInstalled = await checkAppInstalled('com.tencent.mm');

注意事项:

  1. 需要在module.json5中声明权限:ohos.permission.GET_BUNDLE_INFO_PRIVILEGED(适用于系统应用)或ohos.permission.GET_BUNDLE_INFO(适用于普通应用,需用户授权)。
  2. 此方法为异步操作,需在异步上下文(如async函数)中调用。

二、常见应用Schemes分享

通过scheme拉起应用是常见需求,以下是部分常用应用的scheme格式:

  1. 微信

    • 通用拉起:weixin://
    • 扫码:weixin://scanqrcode
    • 小程序(需特定格式,通常通过WXAPI调用)
  2. 支付宝

    • 通用拉起:alipay://
    • 扫码:alipay://scan
    • 付款码:alipay://platformapi/startapp?appId=20000056
  3. QQ

    • 通用拉起:mqq://
    • 打开聊天窗口:mqq://im/chat?chat_type=wpa&uin=QQ号码
  4. 抖音

    • 通用拉起:snssdk1128:// (scheme可能随版本变化)
    • 个人主页:snssdk1128://user/profile/用户ID
  5. 系统浏览器

    • 打开网页:https://http://

使用示例(通过startAbility拉起):

import Want from '@ohos.app.ability.Want';
import { BusinessError } from '@ohos.base';

let want: Want = {
  uri: 'weixin://'  // 拉起微信
};
try {
  await context.startAbility(want);
} catch (error) {
  console.error(`拉起应用失败: ${error.code}, ${error.message}`);
}

三、注意事项

  1. 权限声明:查询应用信息需相应权限,普通应用使用GET_BUNDLE_INFO权限时需动态申请。
  2. scheme稳定性:第三方应用的scheme可能随版本更新而变化,使用前需测试验证。
  3. 隐私合规:查询或拉起其他应用需遵循隐私规范,明确告知用户目的。

以上方法可有效实现应用安装状态检查及跨应用拉起功能。

回到顶部