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

3 回复

已解决,代码如下:

/**
 * 获取指定应用信息
 * 配合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这种格式时,说明应用名称是存储在资源文件中的。

解决方案:

  1. 使用@ohos.resourceManager模块加载目标应用的资源。
  2. 通过资源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 '';
  }
}

注意事项:

  1. 需要确保应用已安装且可访问。
  2. 需要处理可能的异常情况。
  3. 对于系统应用,可能需要额外权限。

这种方法可以正确解析出资源引用格式的应用名称,获取到最终显示给用户的真实应用名称。

回到顶部