Android-获取版本号和版本名称

package com.block.android

import android.content.Context
import android.content.pm.PackageInfo
import android.content.pm.PackageManager
import android.content.pm.PackageManager.NameNotFoundException
import android.os.Build
import androidx.core.content.pm.PackageInfoCompat


fun Context.getVersionName(): String {
    return try {
        getInfo().versionName
    } catch (e: NameNotFoundException) {
        ""
    }
}

fun Context.getVersionCode(): Int {
    return try {
        getInfo().versionCode
    } catch (e: NameNotFoundException) {
        0
    }
}

//推荐使用,为了之后的兼容性,可以先不添加 versionCodeMajor
fun Context.getVersionCodeLong(): Long {
    return try {
        PackageInfoCompat.getLongVersionCode(getInfo())
    } catch (e: NameNotFoundException) {
        0L
    }
}

private fun Context.getInfo(): PackageInfo {
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        packageManager.getPackageInfo(packageName, PackageManager.PackageInfoFlags.of(0))
    } else {
        packageManager.getPackageInfo(packageName, 0)
    }
}
小记
  • Android 33 进一步规范了 getPackageInfo 参数,只接收 0 和 PackageInfoFlags 中的值
  • Android 28 引入了主版本 versionCodeMajor , 只支持在 AndroidManifest 文件中配置。可以扩大 VersionCode 的值,一般情况下用不到。
资料

PackageInfoFlags

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值