127

在我的清单中,我有:

  <application
    android:name=".MyApp"
    android:icon="@drawable/ic_launcher_icon"
    android:label="@string/app_name"
    android:debuggable="true">

如何获取标签元素?

注意:我的代码在别人的内部运行,所以我无权访问@string/app_name

4

15 回答 15

189

有一种比其他答案更简单的方法,不需要您明确命名资源或担心包名称的异常。如果您直接使用字符串而不是资源,它也可以工作。

做就是了:

public static String getApplicationName(Context context) {
    ApplicationInfo applicationInfo = context.getApplicationInfo();
    int stringId = applicationInfo.labelRes;
    return stringId == 0 ? applicationInfo.nonLocalizedLabel.toString() : context.getString(stringId);
}

希望这可以帮助。

编辑

根据 Snicolas 的评论,我已经修改了上面的内容,以便它不会尝试解析 0 的 id。而是使用,nonLocalizedLabel作为退避。无需包装在 try/catch 中。

于 2013-02-27T14:23:02.513 回答
61

如果在 AndroidManifest.xml 中的 strings.xml/hardcoded 中未提及,无论出于何种原因,例如 android:label="MyApp"

public String getAppLable(Context context) {
    PackageManager packageManager = context.getPackageManager();
    ApplicationInfo applicationInfo = null;
    try {
        applicationInfo = packageManager.getApplicationInfo(context.getApplicationInfo().packageName, 0);
    } catch (final NameNotFoundException e) {
    }
    return (String) (applicationInfo != null ? packageManager.getApplicationLabel(applicationInfo) : "Unknown");
}

或者,如果您知道字符串资源 ID,那么您可以直接通过

getString(R.string.appNameID);
于 2013-05-08T15:09:17.547 回答
50

爪哇

public static String getApplicationName(Context context) {
    return context.getApplicationInfo().loadLabel(context.getPackageManager()).toString();
}

Kotlin(作为扩展)

fun Context.getAppName(): String = applicationInfo.loadLabel(packageManager).toString()
于 2013-05-10T16:17:51.043 回答
29

从任何上下文使用:

getApplicationInfo().loadLabel(getPackageManager()).toString();
于 2014-09-11T07:10:54.927 回答
15

如果您知道包名称,请使用以下代码段

ApplicationInfo ai;
try {
    ai = pm.getApplicationInfo(packageName, 0);
} catch (final NameNotFoundException e) {
    ai = null;
}
final String applicationName = (String) (ai != null ? pm.getApplicationLabel(ai) : "(unknown)");
于 2012-06-27T15:03:47.760 回答
8

在 Kotlin 中很简单:

val appLabel = context.applicationInfo.nonLocalizedLabel.toString()
于 2020-04-12T09:20:35.013 回答
8

Kotlin中,使用以下代码获取应用程序名称:

        // Get App Name
        var appName: String = ""
        val applicationInfo = this.getApplicationInfo()
        val stringId = applicationInfo.labelRes
        if (stringId == 0) {
            appName = applicationInfo.nonLocalizedLabel.toString()
        }
        else {
            appName = this.getString(stringId)
        }
于 2019-04-27T07:42:20.373 回答
7

如果您只需要应用程序名称,而不需要包名称,那么只需编写此代码。

 String app_name = packageInfo.applicationInfo.loadLabel(getPackageManager()).toString();
于 2014-07-15T09:19:11.820 回答
2

使用 RunningAppProcessInfo 获取应用程序名称:

ActivityManager am = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE);
List l = am.getRunningAppProcesses();
Iterator i = l.iterator();
PackageManager pm = this.getPackageManager();
while(i.hasNext()) {
  ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo)(i.next());
  try {
    CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA));
    Log.w("LABEL", c.toString());
  }catch(Exception e) {
    //Name Not FOund Exception
  }
}
于 2012-06-27T15:09:17.070 回答
1

添加到的源评论NonLocalizedLabel现在指示我们:

return context.getPackageManager().getApplicationLabelFormatted(context.getApplicationInfo());
于 2018-10-10T20:56:12.180 回答
1

好吧,伙计们,另一个时尚的选择是

Application.Context.ApplicationInfo.NonLocalizedLabel

验证了应用程序元素上的硬编码 android 标签。

<application android:label="Big App"></application>

参考:http: //developer.android.com/reference/android/content/pm/PackageItemInfo.html#nonLocalizedLabel

于 2016-01-24T22:08:25.680 回答
1

默认情况下,您有一个由 AndroidStudio 生成的名为“app_name”的字符串资源。为什么不简单地使用它?或为此目的创建的任何其他字符串资源。比调用几个内部方法来得出一个你必须首先给自己设置的值要容易得多。

于 2021-03-04T18:49:45.100 回答
0

您是否尝试过使用该PackageManager#getActivityInfo()方法?将有一个字段应包含应用程序的名称。

在这里查看一个非常相似的问题的答案。

于 2012-06-27T15:04:21.123 回答
0

你可以用这个

JAVA

ApplicationInfo appInfo = getApplicationContext().getApplicationInfo();
String applicationLabel = getApplicationContext().getPackageManager().getApplicationLabel(appInfo).toString();
于 2021-12-14T01:51:14.123 回答
0

科特林

在kotlin中获取应用程序名称的简单函数

fun getApplicationName() : String{
    var applicationName = ""
    try {
        val applicationInfo = application.applicationInfo
        val stringId = applicationInfo.labelRes
        if (stringId == 0) {
            applicationName = applicationInfo.nonLocalizedLabel.toString()
        }
        else {
            applicationName = application.getString(stringId)
        }
    } catch (e: Exception) {
        e.printStackTrace()
    }
    return applicationName
}
于 2022-02-25T20:10:29.977 回答