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