包管理开发常见问题
如何判断某个应用是否为系统应用
适用于OpenHarmony 3.2 Beta5 API 9
解决措施
使用bundleManager模块的getApplicationInfo接口(仅系统应用可以使用)获取待检验应用的ApplicationInfo,根据ApplicationInfo中systemApp字段判断,若为true,则是系统应用,否则为非系统应用。
参考链接
如何获取应用配置的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);
}
参考链接
如何获取应用自身的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}`)
参考链接
如何获取App版本号,版本名,屏幕分辨率等信息
适用于:OpenHarmony 3.2 Beta5
解决措施
-
通过@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) })
-
在模块@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获取。
- 导入@ohos.bundle.bundleManager模块,使用bundleManager.getBundleInfoForSelf()获取bundleInfo信息。
- 使用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 API 9
问题现象
如何查询系统内其他应用的信息
解决措施
查询系统内其他应用信息的API暂时只提供给系统应用使用,具体使用方法:
-
查询系统内指定应用信息需要获取normal级权限ohos.permission.GET_BUNDLE_INFO,使用接口bundleManager.getApplicationInfo()。
-
查询系统内所有应用信息需要获取system_basic级权限ohos.permission.GET_BUNDLE_INFO_PRIVILEGED,使用接口bundleManager.getAllApplicationInfo()。
参考链接
@ohos.bundle.bundleManager (bundleManager模块)
如何查询进程的pid
适用于:OpenHarmony 3.2 Beta API 9
解决措施
可以通过接口@ohos.process来获取。
代码示例
import process from '@ohos.process';
private pid = process.pid;
参考链接
如何让最大化按钮不可用
适用于:OpenHarmony 3.2 Beta API 9
解决措施
可以通过supportWindowModes字段去指定是否显示。
-
full_screen表示支持全屏显示
-
split表示支持分屏显示
-
floating表示支持窗口化显示
代码示例
"abilities": [
{
"name": "EntryAbility",
"srcEntry": "./ets/entryability/EntryAbility.ts",
"description": "$string:EntryAbility_desc",
"icon": "$media:icon",
"label": "$string:EntryAbility_label",
"startWindowIcon": "$media:icon",
"startWindowBackground": "$color:start_window_background",
"exported": true,
"supportWindowMode": ["split", "floating"],
"skills": [
{
"entities": [
"entity.system.home"
],
"actions": [
"action.system.home"
]
}
]
}
]
参考链接