📢 重磅福利!参与活动赢好礼,马克杯、鼠标垫,8月1日-12月31日等你来!
点击链接: 官方班级名称:HarmonyOS赋能资源丰富度建设(第四期)-GitCode

问题现象

在实际开发中,经常会有需要先判断应用是否已安装,再决定直接跳转应用还是引导用户进行其它操作的场景,应如何判断呢?

背景知识

bundleManager.canOpenLink可以查询给定链接是否可以打开,进而判断应用是否安装。指定链接的scheme需要在module.json文件的querySchemes字段下配置。

解决方案

以判断微博是否安装为例。

  1. 微博中已配置uri。
    
      
    1. {
    2. "abilities": [
    3. {
    4. "skills": [
    5. {
    6. "uris": [
    7. {
    8. "scheme":"sinaweibo"
    9. }
    10. ]
    11. }
    12. ]
    13. }
    14. ]
    15. }
  2. 自己的应用中配置querySchemes。
    
      
    1. {
    2. "module": {
    3. "querySchemes": [
    4. "sinaweibo"
    5. ]
    6. }
    7. }
  3. 判断应用微博是否安装。
    
      
    1. isWeiboInstalled(): boolean {
    2. try {
    3. return bundleManager.canOpenLink('sinaweibo://');
    4. } catch (err) {
    5. let message = (err as BusinessError).message;
    6. hilog.error(0x0000, 'testTag', 'canOpenLink failed: %{public}s', message);
    7. }
    8. return false;
    9. }

常见FAQ

Q:如果应用未安装,使用canOpenLink的返回值仍然为true,导致点击没反应,无法正确跳转。

A:检查uri是否配置错误。只有被拉起的应用才需要配置要拉起的uri,自己应用只需要配置对应的querySchemes。

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

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

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐