Android: obtenga el nombre de la aplicación (no el nombre del paquete)

En mi manifiesto tengo:

 

¿Cómo obtengo el elemento de etiqueta? Nota: Mi código se está ejecutando dentro de otro, por lo que no tengo acceso a @ string / app_name.

Hay una manera más fácil que las otras respuestas que no requieren que nombre el recurso explícitamente o se preocupe por las excepciones con nombres de paquetes. También funciona si ha usado una cadena directamente en lugar de un recurso.

Solo haz:

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

Espero que esto ayude.

Editar

A la luz del comentario de Snicolas, modifiqué lo anterior para que no intente resolver la identificación si es 0. En su lugar, utiliza, nonLocalizedLabel no nonLocalizedLabel como un retroceso. No es necesario envolver en try / catch.

Si no se menciona en strings.xml / hardcoded en AndroidManifest.xml por alguna razón, como 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"); } 

O si conoce el ID del recurso de cadena, puede obtenerlo directamente a través de

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

Desde cualquier contexto, use:

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

Si conoce el nombre del paquete, utilice el siguiente fragmento

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

Si solo necesita el nombre de la aplicación, no el nombre del paquete, simplemente escriba este código.

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

Obtenga el nombre de la aplicación utilizando RunningAppProcessInfo como:

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

Bueno chicos otra opción es elegante

Application.Context.ApplicationInfo.NonLocalizedLabel

verificado para la etiqueta de Android codificada en el elemento de la aplicación.

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