【HarmonyOS 5】判断应用是否已安装(canOpenLink)常见schemes分享

📅 2026/7/15 20:36:01
【HarmonyOS 5】判断应用是否已安装(canOpenLink)常见schemes分享
在 HarmonyOS 5 中判断应用是否安装的核心是bundleManager.canOpenLink接口配合querySchemes配置。从 API 12 开始canOpenLink成为了官方推荐的主流方式但使用时需要遵循一些重要规则以下是系统性的梳理。 核心方法canOpenLink与querySchemes1.canOpenLink接口这是bundleManager模块提供的 API用于查询特定链接如weixin://是否可以被系统打开从而间接判断对应的应用是否已安装。它的优点在于在调用拉起应用如打开地图导航、进行支付前可以提前判断目标应用是否存在从而对“未安装”的情况做友好处理如弹窗提示或引导下载优化用户体验。2.querySchemes配置关键前提要使canOpenLink返回正确结果必须在当前应用的module.json5文件中声明你想要查询的 URL Scheme。这个机制主要是出于用户隐私保护防止应用随意扫描设备中已安装的应用列表。配置文件示例 (module.json5)json{ module: { // ... querySchemes: [ weixin, // 微信 qqmap, // 腾讯地图 amapuri, // 高德地图 sinaweibo // 新浪微博 ] } }注意必须在querySchemes中声明否则canOpenLink会返回false即使目标应用已安装。这是 90% 问题的根源。3. 数量限制从 API 21 开始querySchemes中最多可配置200个 URL Scheme在 API 20 及更早版本中上限是50个。 常见应用 Scheme 汇总以下是一些常见鸿蒙应用的 URL Scheme 和包名参考使用前请确认目标应用的鸿蒙版本特性。同时canOpenLink不支持通过bundleName包名来判断安装情况。应用URL Scheme包名 (Bundle Name)微信weixin://官方文档未明确提供腾讯地图qqmap://com.tencent.mapohos高德地图amapuri://com.amap.hmapp百度地图baidumap://com.baidu.hmmap新浪微博sinaweibo://官方文档未明确提供华为地图maps://官方文档未明确提供 代码实战与注意事项1. 基础判断函数这是一个判断应用是否安装的通用函数模板可以放在工具类中复用typescriptimport { bundleManager } from kit.AbilityKit; import { BusinessError } from kit.BasicServicesKit; function isAppInstalled(scheme: string): boolean { try { // 注意这里传入的scheme需要带上:// return bundleManager.canOpenLink(${scheme}://); } catch (err) { let message (err as BusinessError).message; console.error(canOpenLink failed: ${message}); return false; } }2. 拉起前判断与处理在实际拉起应用前可以先用canOpenLink判断然后执行拉起动作openLink或startAbilitytypescript// 以腾讯地图为例 if (isAppInstalled(qqmap)) { // 执行拉起动作例如 context.openLink(qqmap://map/routeplan?...); } else { // 提示用户未安装或引导去应用市场下载 promptAction.showToast({ message: 请先安装腾讯地图 }); }⚠️ 重要例外App Linking 不支持判断需要注意的是canOpenLink不适用于判断以App Linking即https://链接方式跳转的目标应用是否安装。App Linking 的设计理念是无论应用是否已安装用户都能访问到链接对应的内容已安装则打开应用未安装则跳转网页因此canOpenLink可能会返回不准确的结果。 总结在 HarmonyOS 5 开发中“配置querySchemes 调用canOpenLink”是判断应用是否安装的标准且唯一的主流方式。它在 Deep Linking 场景下工作良好但在 App Linking 场景下不适用。开发时请特别注意检查module.json5的配置避免因配置错误导致判断失效。