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

从Android33开始,getPackageInfo方法的参数被进一步规范,只能接受0或PackageInfoFlags枚举值。此外,自Android28,引入了主版本号versionCodeMajor,需要在AndroidManifest中配置。提供的函数封装了兼容不同API级别获取版本名、版本码和长版本码的方法,处理了NameNotFoundException异常。
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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值