在代码中获取android:versionName清单元素


Answers:


144

无需为此解析AndroidManifest.xml文件。

您可以使用以下方法获取此信息:

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

在您的onCreate()方法中使用它。


我需要将我的应用程序android:versionName与下载中的应用程序进行比较。我的应用程序不在android市场中。.我需要将手机中的versionName与网站上可用的版本名进行比较,以便获得新版本并显示警报以对其进行更新..如何获得该应用程序的新版本号在网站上
jennifer

@jebbifer:只需Http Get从您的应用程序创建一个请求,然后在该请求的参数中发送该值。在服务器上,您需要处理该请求并比较该应用程序的版本值。如果大于客户端应用程序,则作为响应,向他/她发送一个链接,以下载该应用程序的新版本。
维卡斯·帕蒂达

35

如果这对其他人有帮助,您也可以访问 @string像其他XML文件一样从AndroidManifest.xml资源。

因此,例如,在AndroidManifest.xml中:

android:versionName="@string/app_versionName"

并在代码中:

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

这样,您就不需要(烦人的imo)try / catch语句。我不确定这是否是经过批准的处理方式,但对我来说有意义。


1
很酷的解决方案!与其直接从清单中直接编辑字符串,不如使用一个字符串值并对其进行编辑,那么您的代码将不会更改!我喜欢 !+2:P
S.Thiongane 2014年

4
注意此棉绒警告消息android:versionName不能是资源网址,它必须是文字字符串
S.Thiongane 2014年

耻辱。那条皮毛消息一定是最近才出现的。我不记得在进行此操作时看到它。
ForeverWintr 2014年

9

如果您使用的是Android Studio,则版本名称在BuildConfig类中可用。此类在编译时生成:

String versionName = BuildConfig.VERSION_NAME;

这是检索版本名称的最干净的方法。


2

到目前为止,我用下面的代码片段从文章,并顺利拿到了版本号版本名称AndroidManifest.xml

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

/* Get android:versionCode */
int versionCode = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;

请扩展您的答案,因为仅链接的答案在SO上不被认为是好的。
Mike Szyndel 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.