Android 平台如何取得程序自身的版本?

    想必 99% 的程序都有一个 "About" 吧?这里一般都会写上程序名称和版本号。要知道,AndroidManifest.xml 中也有版本号(Version Name),同样的信息在两个地方出现,就引出了一个问题:如何在后续升级时保证二者同步?

    我首先想到的方法就是在 res/values/strings.xml 中定义一个 entry,比如

<string name="version_name">1.0</string>

,然后再在两个地方引用这个字符串 R.string.version_name 或 @string/version_name。当然,About UI 部分可以根据情况直接写在 layout xml (后者)或代码中(前者),但是 AndroidManifest.xml 只能使用后者。这样版本号就只有一个定义,在 strings.xml 中,以后升级时修改这一个地方就可以了。这样改完代码后,编译,运行,一切正常,我感到很欣慰。

    然而,很快问题就出现了:当我上传这个程序到 Android Market 上时,系统提示 Version Name 无效!看来 Google 的 Android

Market 后台还不很成熟,这应该是一个 bug,我可以提交一个 issue,但是我的程序不能等到 Android Market 改完 bug 再发布吧?

    思考问题要灵活,既然 AndroidManifest.xml 中不能引用其他 xml 中的资源,那么就让版本号定义在它那里,其他用到版本号的地方都想办法取出来不就可以了!!问题化归为:“如何在运行时取到程序自身的版本?”(之所以这里强调“运行时”是因为我感觉 AndroidManisfest.xml 中的东西是无法通过类似 @string/abd 形式来引用的。如果你知道如何引用,请告诉我,谢谢!)。经过查找文档和 Google,最终找到答案:

PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), 0);

PackageInfo 中包含了关于当前 package 的许多信息(Version Number 当然也包含在其中了),另外 PackageManager.getPackageInfo() 的第二个参数也大有文章。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值