127 votes

Android - Comment obtenir le nom de l'application (pas le nom du paquet) ?

Dans mon manifeste, j'ai :

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

Comment obtenir l'élément label ?

Note : Mon code est exécuté à l'intérieur de celui de quelqu'un d'autre, donc je n'ai pas accès à @string/app_name

190voto

darrenp Points 872

Il existe un moyen plus simple que les autres réponses, qui ne nécessite pas de nommer explicitement la ressource ou de s'inquiéter des exceptions avec les noms de paquets. Elle fonctionne également si vous avez utilisé directement une chaîne au lieu d'une ressource.

Fais-le :

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

J'espère que cela vous aidera.

Edit

À la lumière du commentaire de Snicolas, j'ai modifié la méthode ci-dessus pour qu'elle n'essaie pas de résoudre l'identifiant s'il est égal à 0, mais qu'elle utilise, nonLocalizedLabel comme backoff. Il n'est pas nécessaire de l'enfermer dans un try/catch.

61voto

Vinayak B Points 16555

S'il n'est pas mentionné dans le fichier strings.xml ou s'il est codé en dur dans le fichier AndroidManifest.xml pour une raison quelconque, par exemple 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");
}

Ou si vous connaissez l'ID de la ressource String, vous pouvez l'obtenir directement via

getString(R.string.appNameID);

50voto

Heath Borders Points 8067

Java

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

Kotlin (en tant qu'extension)

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

29voto

zaman Points 180

De toute utilisation du Contexte :

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

15voto

Vipul Shah Points 13233

Si vous connaissez le nom du paquet, utilisez l'extrait suivant

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X