Android - How to get application name? (Not package name)

Android

Android Problem Overview


In my manifest I have:

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

How do I get the label element?

Note: My code is running inside of someone else's, so I don't have access to @string/app_name

Android Solutions


Solution 1 - Android

There's an easier way than the other answers that doesn't require you to name the resource explicitly or worry about exceptions with package names. It also works if you have used a string directly instead of a resource.

Just do:

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

Hope this helps.

Edit

In light of the comment from Snicolas, I've modified the above so that it doesn't try to resolve the id if it is 0. Instead it uses, nonLocalizedLabel as a backoff. No need for wrapping in try/catch.

Solution 2 - Android

If not mentioned in the strings.xml/hardcoded in AndroidManifest.xml for whatever reason like 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");
}

Or if you know the String resource ID then you can directly get it via

getString(R.string.appNameID);

Solution 3 - Android

Java

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

Kotlin (as extension)

fun Context.getAppName(): String = applicationInfo.loadLabel(packageManager).toString()

Solution 4 - Android

From any Context use:

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

Solution 5 - Android

If you know Package name then Use following snippet

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

Solution 6 - Android

In Kotlin, use the following codes to get Application Name:

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

Solution 7 - Android

In Kotlin its simple:

val appLabel = context.applicationInfo.nonLocalizedLabel.toString()

Solution 8 - Android

If you need only the application name, not the package name, then just write this code.

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

Solution 9 - Android

Get Appliction Name Using RunningAppProcessInfo as:

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

Solution 10 - Android

By default you have a string resource called "app_name" generated by AndroidStudio. Why not simply use that? Or any other string resource created for this purpose. Much easier than calling several internal methods to come up with a value you have to set yourself in the first place.

Solution 11 - Android

Okay guys another sleek option is

Application.Context.ApplicationInfo.NonLocalizedLabel

verified for hard coded android label on application element.

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

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

Solution 12 - Android

The source comment added to NonLocalizedLabel directs us now to:

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

Solution 13 - Android

You can use this

> JAVA

ApplicationInfo appInfo = getApplicationContext().getApplicationInfo();
String applicationLabel = getApplicationContext().getPackageManager().getApplicationLabel(appInfo).toString();

Solution 14 - Android

Kotlin

> A simple function to get the name of the application in 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
}

Solution 15 - Android

Have you tried using the PackageManager#getActivityInfo() method? There will be a field that should contain the name of the application.

See the answer to a very similar question here.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJohannView Question on Stackoverflow
Solution 1 - AndroiddarrenpView Answer on Stackoverflow
Solution 2 - AndroidVinayak BevinakattiView Answer on Stackoverflow
Solution 3 - AndroidHeath BordersView Answer on Stackoverflow
Solution 4 - AndroidzamanView Answer on Stackoverflow
Solution 5 - AndroidVipulView Answer on Stackoverflow
Solution 6 - AndroidJerry ChongView Answer on Stackoverflow
Solution 7 - AndroidAsaf PinhassiView Answer on Stackoverflow
Solution 8 - AndroidPir Fahim ShahView Answer on Stackoverflow
Solution 9 - Androidρяσѕρєя KView Answer on Stackoverflow
Solution 10 - AndroidMarcellView Answer on Stackoverflow
Solution 11 - AndroidAhmed AlejoView Answer on Stackoverflow
Solution 12 - AndroidGáborView Answer on Stackoverflow
Solution 13 - Androidhong developerView Answer on Stackoverflow
Solution 14 - AndroidRohit SView Answer on Stackoverflow
Solution 15 - AndroidgkiarView Answer on Stackoverflow