2012-06-27 25 views
78

En mi manifiesta que tengo:Android: Obtener nombre de la aplicación (no Nombre del paquete)

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

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

Respuesta

9

Si conoce el nombre del paquete a continuación, utilizar 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)"); 
+0

pm ¿Cuál es aquí? –

+1

@RishabhTayal pm denota el objeto PackageManager. –

+0

@VipulShah me estoy volviendo desconocido cada vez – nida

0

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

Ver la respuesta a una pregunta muy similar here.

1

Get Appliction Nombre Usando 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 
    } 
} 
119

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

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

Espero que esto ayude.

Editar

A la luz del comentario de Snicolas, he modificado el anterior para que no trata de resolver el identificador de si es 0. En su lugar utiliza, nonLocalizedLabel como un retroceso. No es necesario envolver en try/catch.

+3

Esto funciona bien, siempre y cuando realmente use una etiqueta en 'android: name'. Si has codificado una cadena, falla. – Snicolas

+2

Es cierto, pero el nombre de la aplicación normalmente se especifica a través de un recurso de cadena, por supuesto. Una cuerda cableada está marcada con pelusa y no se recomienda. – darrenp

+1

Solo ten en cuenta que arrojará android.content.res.Resources $ NotFoundException si la cadena no se encuentra – zenocon

42

Si no se menciona en el strings.xml/hardcoded en AndroidManifest.xml por cualquier 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 se conoce el ID de recurso de cadena, entonces puede directamente conseguirlo a través de

getString(R.string.appNameID); 
+0

mientras lees Nombre de aplicación de string.xml, a veces obtengo caracteres basura. No sé por qué ..Ex: à¤¸à ¥  ठ• à ¥ ˆ नठ° – harikrishnan

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

[loadLabel] (https://developer.android.com/reference/android/content/pm/PackageItemInfo .html # loadLabel (android.content.pm.PackageManager)) devuelve una 'CharSequence'. Creo que necesitas '.toString()' al final. – joshbodily

+0

return es CharSequence o String.valueOf(); –

5

Si necesita sólo el nombre de la aplicación, no el nombre del paquete, a continuación, acaba de escribir el código.

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

de cualquier uso Contexto:

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