Java >> Java tutorial >  >> Tag >> package

Android SDK 28 - versionCode i PackageInfo er blevet forældet

Den siger, hvad der skal gøres på Java-dokumentet (jeg anbefaler ikke at bruge Kotlin-dokumentationen for meget; den er ikke rigtig godt vedligeholdt):

versionCode

Dette felt blev forældet i API-niveau 28. Brug getLongVersionCode() i stedet, som inkluderer både denne og den ekstra versionCodeMajor-attribut. Versionsnummeret for denne pakke, som angivet af taggets versionCode-attribut.

Dette er dog en API 28-metode, så overvej at bruge PackageInfoCompat. Den har en statisk metode:

getLongVersionCode(PackageInfo info)

Min anbefalede løsning:

Inkluder dette i din hovedbuild.gradle :

implementation 'androidx.appcompat:appcompat:1.0.2'

så brug bare denne kode:

PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
long longVersionCode= PackageInfoCompat.getLongVersionCode(pInfo);
int versionCode = (int) longVersionCode; // avoid huge version numbers and you will be ok

Hvis du har problemer med at tilføje appcompat-bibliotek, så brug bare denne alternative løsning :

final PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
int versionCode;
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
    versionCode = (int) pInfo.getLongVersionCode(); // avoid huge version numbers and you will be ok
} else {
    //noinspection deprecation
    versionCode = pInfo.versionCode;
}

Bare for andre, der bruger Xamarin, var mit svar:

public long GetBuild()
{
    var context = global::Android.App.Application.Context;
    PackageManager manager = context.PackageManager;
    PackageInfo info = manager.GetPackageInfo(context.PackageName, 0);

    return info.LongVersionCode;
}

Java tag