包管理开发常见问题

如何判断某个应用是否为系统应用

适用于OpenHarmony 3.2 Beta5 API 9

解决措施

使用bundleManager模块的getApplicationInfo接口(仅系统应用可以使用)获取待检验应用的ApplicaitonInfo,根据ApplicaitonInfo中systemApp字段判断,若为true,则是系统应用,否则为非系统应用。

参考链接

bundleManager模块

如何获取应用配置的versionCode和versionName

适用于:Openharmony 3.2 Beta5 API 9

解决措施

首先通过@ohos.bundle.bundleManager模块bundleManager.getBundleInfoForSelf()接口获取包信息BundleInfo,然后分别通过BundleInfo.versionCode、BundleInfo.versionName获取所需信息。

代码示例

import bundleManager from '@ohos.bundle.bundleManager';
import hilog from '@ohos.hilog';
let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_DEFAULT;
try {
  bundleManager.getBundleInfoForSelf(bundleFlags).then((data) => {
    const versionCode = data.versionCode;
    const versionName = data.versionName;
    hilog.info(0x0000, 'testTag', `successfully. versionCode: ${versionCode}, versionName: ${versionName}`);    
  }).catch(err => {
    hilog.error(0x0000, 'testTag', 'failed. Cause: %{public}s', err.message);
  });
} catch (err) {
  hilog.error(0x0000, 'testTag', 'failed: %{public}s', err.message);
}

参考链接

getBundleInfoForSelf

如何获取应用自身的bundleName

适用于:Openharmony 3.2 Beta5 API9

解决措施

可以通过UIAbilityContext.abilityInfo.bundleName获取。

代码示例

import common from '@ohos.app.ability.common';
const context = getContext(this) as common.UIAbilityContext
console.log(`bundleName: ${context.abilityInfo.bundleName}`)

参考链接

UIAbilityContextAbilityInfo

如何获取App版本号,版本名,屏幕分辨率等信息

适用于:OpenHarmony 3.2 Beta5

解决措施

  1. 通过@ohos.bundle.bundleManager模块中的bundleManager查询bundleInfo。

    在bundleInfo中包含App版本号、版本名信息。

    import bundleManager from '@ohos.bundle.bundleManager';
    ...
    bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION).then((bundleInfo)=>{
      let versionName = bundleInfo.versionName;//应用版本名
      let versionNo = bundleInfo.versionCode;//应用版本号
    }).catch((error)=>{
      console.error("get bundleInfo failed,error is "+error)
    })
    
  2. 在模块@ohos.app.ability.Configuration中获取screenDensity,其中包含屏幕分辨率信息。

    import common from '@ohos.app.ability.common';
    ...
    let context = getContext(this) as common.UIAbilityContext;
    let screenDensity = context.config.screenDensity;
    

如何获取应用自身的源文件路径

适用于:OpenHarmony 3.2 Beta5 API 9

解决措施

  • 方式一:使用应用上下文context获取。

    this.uiAbilityContext.abilityInfo.applicationInfo.codePath
    
  • 方式二:使用@ohos.bundle.bundleManager获取。

    1. 导入@ohos.bundle.bundleManager模块,使用bundleManager.getBundleInfoForSelf()获取bundleInfo信息。
    2. 使用bundleInfo.appInfo.codePath获取应用源文件路径。
    import bundleManager from '@ohos.bundle.bundleManager';
    bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION).then((bundleInfo)=>{
      this.sourcePath = bundleInfo.appInfo.codePath;
    })
    

能否在本应用中获取到其他应用的HAP包信息

适用于:OpenHarmony 3.2 Beta API 9

根据OpenHarmony的安全设计规范,SDK不提供接口能力给三方应用查询其他应用的包信息(包括但不限于应用名称、版本号等)。