HarmonyOS 鸿蒙Next中系统级桌面应用开发,已知系统中其他应用的包名,如何获取这些系统应用的真实名称
HarmonyOS 鸿蒙Next中系统级桌面应用开发,已知系统中其他应用的包名,如何获取这些系统应用的真实名称
OpenHarmony API12
系统级桌面应用开发,已知系统中其他应用的包名,如何获取这些系统应用的真实名称?
通过以上代码拉到的系统应用信息中的名称和图标为以下格式,如何获取真实名称?
"label":"$string:app_name","labelId":16777221,"icon":"$media:app_icon","iconId":16777225
已申请权限如下
目前已能拉到系统中的应用
{
"name": "ohos.permission.BUNDLE_ACTIVE_INFO"
},
{
"name": "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED"
},
{
"name": "ohos.permission.GET_INSTALLED_BUNDLE_LIST",
"reason": "$string:get_installed_bundles_reason",
"usedScene": {
"abilities": [
"EntryAbility"
],
"when": "always"
}
}
更多关于HarmonyOS 鸿蒙Next中系统级桌面应用开发,已知系统中其他应用的包名,如何获取这些系统应用的真实名称的实战教程也可以访问 https://www.itying.com/category-93-b0.html
已解决,代码如下:
/**
* 获取指定应用信息
* 配合ohos.permission.GET_BUNDLE_INFO_PRIVILEGED权限使用
* @param bundleName
* @param abilityName
* @returns
*/
async getAppInfo(bundleName: string, abilityName: string) {
try {
let appInfo: bundleManager.ApplicationInfo = await bundleManager.getApplicationInfo(bundleName, 0)
// console.log('拉到系统应用的信息:', JSON.stringify(appInfo))
let moduleName = appInfo.labelResource.moduleName
const appLabel = await bundleManager.getAbilityLabel(bundleName, moduleName, abilityName)
return appLabel
} catch (err) {
console.error(`获取指定应用${bundleName}信息失败`)
return ''
}
}
更多关于HarmonyOS 鸿蒙Next中系统级桌面应用开发,已知系统中其他应用的包名,如何获取这些系统应用的真实名称的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中,要获取其他系统应用的真实名称,可以使用BundleManager
查询应用信息。通过getBundleInfo
接口传入包名和BundleFlag.GET_BUNDLE_WITH_ABILITIES
标志,即可获取包含应用名称的BundleInfo
对象。应用名称存储在BundleInfo.label
字段中。需注意调用此接口需要申请ohos.permission.GET_BUNDLE_INFO
权限。
在HarmonyOS Next中获取系统应用的真实名称,可以通过解析资源引用来实现。当使用bundleManager.getApplicationInfo
获取到的应用信息中label
字段为$string:app_name
这种格式时,说明应用名称是存储在资源文件中的。
解决方案:
- 使用
@ohos.resourceManager
模块加载目标应用的资源。 - 通过资源ID获取实际字符串值。
示例代码:
import resourceManager from '@ohos.resourceManager';
async function getAppRealName(bundleName: string) {
try {
const appInfo = await bundleManager.getApplicationInfo(bundleName, 0);
const context = await resourceManager.getResourceManager(bundleName);
const appName = await context.getString(appInfo.labelId);
return appName;
} catch (err) {
console.error('Failed to get app name:', err);
return '';
}
}
注意事项:
- 需要确保应用已安装且可访问。
- 需要处理可能的异常情况。
- 对于系统应用,可能需要额外权限。
这种方法可以正确解析出资源引用格式的应用名称,获取到最终显示给用户的真实应用名称。