前言
在Android软件开发过程中,版本升级常常需要得到软件版本,与服务器作对比后决定是否升级,那么如何获取软件版本呢?有时我们需要获取系统版本已决定加载合适的资源文件,系统版本又如何得到呢?假如我们不想要在系统指定的位置填写版本号,我们可以如何定义软件版本呢?又该如何获取呢?本文将一一告诉你。
正文
1、布局是这样的:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.getversion.MainActivity" >
<TextView
android:id="@+id/version"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:hint="@string/please_choose"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true" />
<Button
android:id="@+id/get_system"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/get_app"
android:layout_alignBottom="@+id/get_app"
android:layout_alignParentRight="true"
android:text="@string/sys_version" />
<TextView
android:id="@+id/get"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/get_app"
android:layout_alignBottom="@+id/get_app"
android:layout_alignLeft="@+id/version"
android:text="@string/get"
android:textSize="20sp" />
<Button
android:id="@+id/get_app"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/version"
android:layout_marginLeft="15dp"
android:layout_marginTop="41dp"
android:layout_toRightOf="@+id/get"
android:text="@string/app_version" />
</RelativeLayout>
2、代码是这样滴:
/**
* 获取系统版本号
*/
private void getSystemVersion() {
//int sysVersion = android.os.Build.VERSION.SDK_INT;//获取sdk平台值,如19
String sysVersion = android.os.Build.VERSION.RELEASE;//获取系统版本,如4.0.2
Log.d(TAG, "sysVersion="+sysVersion);
setVersion(getString(R.string.sys_version)+":"+String.valueOf(sysVersion));
}
/**
* 获取软件版本号
*/
private void getAPPVersion() {
PackageManager pm = this.getPackageManager();//得到PackageManager对象
try {
PackageInfo pi = pm.getPackageInfo(this.getPackageName(), 0);//得到PackageInfo对象,封装了一些软件包的信息在里面
int appVersion = pi.versionCode;//获取清单文件中versionCode节点的值
Log.d(TAG, "appVersion="+appVersion);
setVersion(getString(R.string.app_version)+":"+String.valueOf(appVersion));
} catch (NameNotFoundException e) {
e.printStackTrace();
Log.e(TAG, "getAppVersion:"+e.getCause());
}
}
/**
* 设置版本号
* @param ver 版本号
*/
private void setVersion(String ver){
if (ver !=null && (!"".equals(ver))) {
version.setText(ver);
}else {
version.setText(getString(R.string.error));
}
}
}
现在大家该知道如何获取软件版本和系统版本了吧?那么还剩下一个问题:我们如何自定义版本号呢?
利用meta-data节点自定义版本号以及获取方法
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data
android:name="SYSTEM_VERSION"
android:value="1.0 from meta-data" />
</application>
代码中稍作修改,定义一个全局变量表示点击左边按钮的次数,基数次时显示软件标准的版本号,偶数次时,显示自定义版本号。
获取自定义版本号代码如下:
/**
* 获取自定义在meta-data节点下的版本号
*/
private void getCustomVersion(){
PackageManager pm = this.getPackageManager();
try {
ApplicationInfo ai = pm.getApplicationInfo(this.getPackageName(), PackageManager.GET_META_DATA);//第二个参数必须是这个,否则下面报错
String customVersion = ai.metaData.getString("SYSTEM_VERSION");//获取meta-data节点下的value值
setVersion(getString(R.string.app_version)+":"+customVersion);
} catch (NameNotFoundException e) {
e.printStackTrace();
Log.e(TAG, "getCustomVersion:"+e.getCause());
}
}
详细源码下载链接:http://download.youkuaiyun.com/detail/xiong_it/8403983 。
如若转载,还请注明出处和链接:http://blog.youkuaiyun.com/xiong_it/article/details/43227939谢谢!