Jest łatwiejszy sposób niż inne odpowiedzi, który nie wymaga jawnego nazwania zasobu ani martwienia się o wyjątki z nazwami pakietów. Działa również, jeśli użyłeś bezpośrednio łańcucha zamiast zasobu.
Po prostu zrób:
public static String getApplicationName(Context context) {
ApplicationInfo applicationInfo = context.getApplicationInfo();
int stringId = applicationInfo.labelRes;
return stringId == 0 ? applicationInfo.nonLocalizedLabel.toString() : context.getString(stringId);
}
Mam nadzieję że to pomoże.
Edytować
W świetle komentarza Snicolasa, zmodyfikowałem powyższe, aby nie próbowało rozwiązywać identyfikatora, jeśli jest równe 0. Zamiast tego używa go nonLocalizedLabel
jako wycofania. Nie ma potrzeby pakowania w try / catch.
android:name
. Jeśli zakodowałeś ciąg na sztywno, to się nie powiedzie.try ... catch
.Jeśli nie jest wymienione w strings.xml / hardcoded w AndroidManifest.xml z dowolnego powodu, na przykład android: label = "MyApp"
Lub jeśli znasz identyfikator zasobu String, możesz go uzyskać bezpośrednio za pośrednictwem
źródło
źródło
CharSequence
. Myślę, że.toString()
na końcu potrzebujesz .Z dowolnego użycia kontekstu:
źródło
Jeśli znasz nazwę pakietu, użyj następującego fragmentu
źródło
Jeśli potrzebujesz tylko nazwy aplikacji, a nie nazwy pakietu, po prostu napisz ten kod.
źródło
W Kotlinie użyj następujących kodów, aby uzyskać nazwę aplikacji:
źródło
W Kotlinie jest to proste:
źródło
Uzyskaj nazwę aplikacji przy użyciu RunningAppProcessInfo jako:
źródło
Dobra, kolejną elegancką opcją jest
Application.Context.ApplicationInfo.NonLocalizedLabel
zweryfikowano pod kątem zakodowanej na stałe etykiety Androida w elemencie aplikacji.
<application android:label="Big App"></application>
Źródła: http://developer.android.com/reference/android/content/pm/PackageItemInfo.html#nonLocalizedLabel
źródło
Komentarz źródłowy dodany do
NonLocalizedLabel
kieruje nas teraz do:źródło
Czy próbowałeś użyć tej
PackageManager#getActivityInfo()
metody? Pojawi się pole, które powinno zawierać nazwę aplikacji.Zobacz odpowiedź na bardzo podobne pytanie tutaj .
źródło