Holen Sie sich android: versionName Manifest Element im Code

68

Ich möchte wissen, wie die Datei AndroidManifest.xml analysiert wird, um die Anwendungsversionsnummer durch Code zu erhalten. android: versionName

Jennifer
quelle
1
Sie können Ihre Anwendungen versionNamemit erhalten, BuildConfig.VERSION_NAMEwenn Sie Gradle verwenden. Die Antwort finden Sie hier: stackoverflow.com/a/28352130/293280
Joshua Pinter

Antworten:

144

AndroidManifest.xmlDazu muss die Datei nicht analysiert werden.

Sie können dies erhalten, indem Sie:

try
{
    String app_ver = this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName;
}
catch (NameNotFoundException e)
{
    Log.e(tag, e.getMessage());
}

Verwenden Sie dies in Ihrer onCreate()Methode.

Vikas Patidar
quelle
Ich muss meine Anwendung android: versionName mit der App in den Downloads vergleichen. Meine App ist nicht im Android-Markt. Ich muss den Versionsnamen in meinem Handy mit dem auf der Website verfügbaren vergleichen, um die neue Version zu erhalten und eine Warnung zum Aktualisieren anzuzeigen. Wie ist es möglich, die neue Versionsnummer der App zu erhalten? auf der Website
Jennifer
@jebbifer: Erstellen Sie einfach eine Http GetAnfrage aus Ihrer Anwendung und senden Sie diesen Wert in den Parametern dieser Anfrage. Auf Ihrem Server müssen Sie diese Anforderung bearbeiten und die Werte der Anwendungsversion vergleichen. Wenn größer als die Client-App, senden Sie ihm als Antwort einen Link zum Herunterladen einer neuen Version dieser Anwendung.
Vikas Patidar
35

Falls dies für andere hilfreich ist, können Sie auch @stringüber AndroidManifest.xml auf Ressourcen zugreifen, wie dies auch aus anderen XML-Dateien möglich ist.

So zum Beispiel in AndroidManifest.xml:

android:versionName="@string/app_versionName"

und im Code:

string versionName = getResources().getString(R.string.app_versionName);

Auf diese Weise benötigen Sie nicht die (nervige, imo) try / catch-Anweisung. Ich bin mir nicht sicher, ob dies eine anerkannte Vorgehensweise ist, aber es macht für mich Sinn.

ForeverWintr
quelle
1
coole Lösung! Anstatt eine Zeichenfolge direkt aus dem Manifest zu bearbeiten, verwenden Sie einen Zeichenfolgenwert und bearbeiten Sie ihn. Ihr Code ändert sich dann nicht! ich mag ! +2: P
S.Thiongane
4
Beachten Sie diese Flusen Warnmeldung : android: version keine Ressourcen - URL sein kann, muss es eine Zeichenkette sein
S.Thiongane
Schande. Diese Flusennachricht muss kürzlich aufgetaucht sein. Ich kann mich nicht erinnern, es wieder gesehen zu haben, als ich daran gearbeitet habe.
ForeverWintr
9

Wenn Sie Android Studio verwenden, ist der Versionsname in der Klasse BuildConfig verfügbar . Diese Klasse wird zur Kompilierungszeit generiert:

String versionName = BuildConfig.VERSION_NAME;

Dies ist der sauberste Weg, um den Versionsnamen abzurufen.

funcoder
quelle
2

Bisher habe ich das folgende Code-Snippet aus diesem Artikel verwendet und den Versionscode und den Versionsnamen erfolgreich von erhaltenAndroidManifest.xml

/* Get android:versionName */
String versionName = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;

/* Get android:versionCode */
int versionCode = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
Krise
quelle
Bitte erweitern Sie Ihre Antwort, da Nur-Link-Antworten auf SO nicht als gut angesehen werden.
Mike Szyndel