文档管理中心
我的
您当前正在浏览新版开发者文档中心,目录分类和层级有所调整。点击左侧当前文档分类名称前的“☰”图标,可切换文档分类。 了解新版目录
问题处理与运维开发与测试问题应用框架开发程序框架程序框架(Ability)如何判断应用程序是否安装

如何判断应用程序是否安装

问题现象

在实际开发中,如何判断设备上是否已安装了目标应用?

背景知识

canOpenLink:根据给定的链接判断目标应用是否可访问,链接中的scheme需要在module.json配置文件标签里的querySchemes字段下配置。

解决方案

以判断华为地图是否安装为例:(需要知道目标应用的querySchemes、应用链接url)

  1. 在应用中配置querySchemes:
    收起
    自动换行
    深色代码主题
    复制
    1. "querySchemes": [
    2. // 华为地图
    3. 'maps'
    4. ]
  2. 判断应用地图是否安装:
    收起
    自动换行
    深色代码主题
    复制
    1. import { bundleManager } from '@kit.AbilityKit';
    2. @Entry
    3. @Component
    4. struct Index {
    5. @State result:boolean = false;
    6. build() {
    7. Column({ space: 16 }) {
    8. Button('目标应用安装测试').onClick(() => {
    9. this.isMapInstalled();
    10. });
    11. Text(this.result ? '已安装' : '未安装');
    12. }
    13. .width('100%')
    14. .height('100%')
    15. .justifyContent(FlexAlign.Center)
    16. }
    17. isMapInstalled() {
    18. try {
    19. this.result = bundleManager.canOpenLink('maps://navigation');
    20. } catch (err) {
    21. let message = (err as BusinessError).message;
    22. console.error(`canOpenLink failed: ${message}`);
    23. }
    24. console.info(`canOpenLink result: ${this.result}`);
    25. }
    26. }

常见FAQ

Q:能否根据bundleName (包名)判断应用是否安装?

A:当前无法直接通过bundleName (包名)判断应用是否安装,可以尝试使用startAbility拉起应用,错误码是16000001时,指定的ability不存在。

Q:canOpenLink判断App Linking方式目标应用是否安装,卸载目标应用后还是返回true,是什么原因?

A:canOpenLink接口不支持判断以App Linking方式跳转的目标应用是否可访问。使用App Linking应用链接进行跳转时,系统会根据接口传入的uri信息(HTTPS链接)将用户引导至目标应用中的特定内容,无论应用是否已安装,用户都可以访问到链接对应的内容,所以不能作为判断应用是否安装的条件。