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

En mi manifiesto tengo:

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

¿Cómo obtengo el elemento label? Nota: Mi código se ejecuta dentro de otra persona, así que no tengo acceso a @ string / app_name.

Hay una manera más fácil que las otras respuestas que no requieren que el nombre del recurso explícitamente o preocuparse por las excepciones con nombres de paquetes. También funciona si ha utilizado 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, he modificado lo anterior para que no trate de resolver el id si es 0. En lugar de ello utiliza, nonLocalizedLabel como backoff. No hay necesidad de 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 de 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()); } 

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)"); 

De cualquier uso del Contexto:

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

Si sólo 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(); 

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

¿Ha intentado utilizar el método PackageManager#getActivityInfo() ? Habrá un campo que debe contener el nombre de la aplicación.

Vea la respuesta a una pregunta muy similar aquí .

Ok chicos otra opción elegante es

Application.Context.ApplicationInfo.NonLocalizedLabel

Verificado para la etiqueta del androide duro codificado en el elemento de la aplicación.

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

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

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.