Es gibt einen einfacheren Weg als die anderen Antworten, bei dem Sie die Ressource nicht explizit benennen oder sich über Ausnahmen mit Paketnamen Gedanken machen müssen. Dies funktioniert auch, wenn Sie eine Zeichenfolge direkt anstelle einer Ressource verwendet haben.
Mach einfach:
public static String getApplicationName(Context context) {
ApplicationInfo applicationInfo = context.getApplicationInfo();
int stringId = applicationInfo.labelRes;
return stringId == 0 ? applicationInfo.nonLocalizedLabel.toString() : context.getString(stringId);
}
Hoffe das hilft.
Bearbeiten
In Anbetracht des Kommentars von Snicolas habe ich das oben Gesagte so geändert, dass nicht versucht wird, die ID aufzulösen, wenn sie 0 ist. Stattdessen wird sie nonLocalizedLabel
als Backoff verwendet. Keine Notwendigkeit, in try / catch einzuwickeln.
android:name
. Wenn Sie eine Zeichenfolge fest codiert haben, schlägt dies fehl.try ... catch
.Wenn nicht in der Datei strings.xml / hardcoded in AndroidManifest.xml aus irgendeinem Grund wie android erwähnt: label = "MyApp"
Wenn Sie die String-Ressourcen-ID kennen, können Sie sie direkt über abrufen
quelle
quelle
CharSequence
. Ich denke du brauchst.toString()
am Ende.Verwenden Sie aus jedem Kontext:
quelle
Wenn Sie den Paketnamen kennen, verwenden Sie das folgende Snippet
quelle
Wenn Sie nur den Anwendungsnamen und nicht den Paketnamen benötigen, schreiben Sie einfach diesen Code.
quelle
Verwenden Sie in Kotlin die folgenden Codes, um den Anwendungsnamen abzurufen:
quelle
In Kotlin ist es einfach:
quelle
Abrufen des Anwendungsnamens mithilfe von RunningAppProcessInfo wie folgt:
quelle
Okay Leute, eine andere elegante Option ist
Application.Context.ApplicationInfo.NonLocalizedLabel
Verifiziert auf hartcodiertes Android-Etikett auf dem Anwendungselement.
<application android:label="Big App"></application>
Referenz: http://developer.android.com/reference/android/content/pm/PackageItemInfo.html#nonLocalizedLabel
quelle
Der hinzugefügte
NonLocalizedLabel
Quellkommentar verweist uns jetzt auf:quelle
Haben Sie versucht, die
PackageManager#getActivityInfo()
Methode zu verwenden? Es wird ein Feld geben, das den Namen der Anwendung enthalten sollte.Die Antwort auf eine sehr ähnliche Frage finden Sie hier .
quelle