Android - 如何获取应用程序名称? (不是包名)

时间:2012-06-27 15:00:57

标签: android

在我的清单中我有:

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

如何获取标签元素?

注意:我的代码在其他人的内部运行,因此我无法访问@ string / app_name

13 个答案:

答案 0 :(得分:156)

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

只是做:

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中包装。

答案 1 :(得分:50)

如果没有在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");
}

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

获取它
getString(R.string.appNameID);

答案 2 :(得分:34)

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

答案 3 :(得分:20)

从任何上下文使用:

getApplicationInfo().loadLabel(getPackageManager()).toString();

答案 4 :(得分:11)

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

ApplicationInfo ai;
try {
    ai = pm.getApplicationInfo(packageName, 0);
} catch (final NameNotFoundException e) {
    ai = null;
}
final String applicationName = (String) (ai != null ? pm.getApplicationLabel(ai) : "(unknown)");

答案 5 :(得分:6)

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

 String app_name = packageInfo.applicationInfo.loadLabel(getPackageManager()).toString();

答案 6 :(得分:4)

在Kotlin中很简单:

val appLabel = context.applicationInfo.nonLocalizedLabel

答案 7 :(得分:1)

使用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
  }
}

答案 8 :(得分:1)

好的家伙另一个光滑的选择是

Application.Context.ApplicationInfo.NonLocalizedLabel

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

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

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

答案 9 :(得分:1)

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

        // 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)
        }

答案 10 :(得分:1)

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

答案 11 :(得分:0)

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

查看非常相似的问题here的答案。

答案 12 :(得分:0)

现在添加到NonLocalizedLabel的原始注释将我们定向到:

return context.getPackageManager().getApplicationLabelFormatted(context.getApplicationInfo());