1. 程式人生 > >Android基礎:教你如何獲取軟體自身版本號和Android系統版本號

Android基礎:教你如何獲取軟體自身版本號和Android系統版本號

前言

在Android軟體開發過程中,版本升級常常需要得到軟體版本,與伺服器作對比後決定是否升級,那麼如何獲取軟體版本呢?有時我們需要獲取系統版本已決定載入合適的資原始檔,系統版本又如何得到呢?假如我們不想要在系統指定的位置填寫版本號,我們可以如何定義軟體版本呢?又該如何獲取呢?本文將一一告訴你。

正文

1、佈局是這樣的:

有兩個按鈕,一個按鈕獲取軟體版本,一個按鈕獲取系統版本;一個TextView顯示獲取到的版本號:
<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節點自定義版本號以及獲取方法

首先在清單檔案Mainfest中的Application節點下新增一個節點<meta-data>,指定android:name,android:value值即可:
   <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());
		}
	}