關於軟體更新的問題,簡單的說一下。
首先軟體更新需要判斷是否需要更新。如果需要更新,需要擷取更新的連結。我們可以把這個看成一個簡單的系統。需要用戶端請求和服務端相應。 為了簡單起見我們將服務端就只放一個簡單的XML檔案,XML檔案包含了最新的用戶端版本號碼(這裡盡量採用版本號碼,因為版本號碼是Int型的便於比較)和最新版APK的。
1 <update>
2 <version>2</version>
3 <url>http://www.youdoman.com/apk.apk</url>
4 </update>
這樣簡單的伺服器端就可以了。
用戶端只需要讀取此xml,並通過sax解析。然後擷取用戶端的版本號碼跟從網路中讀取的最新版本號碼做比較,如果用戶端的版本號碼跟伺服器端的版本號碼不同則需要更新,調用系統Intent下載更新APK即可。
1 //擷取軟體系統版本號碼
2 public class AppStatus {
3 protected static int getAppVersionId(Context ctx) {
4 try {
5 return ctx.getPackageManager().getPackageInfo(ctx.getPackageName(),0).versionCode;
6 } catch (NameNotFoundException e) {
7 // TODO Auto-generated catch block
8 return -1;
9 }
10 }
11 }
有的時候,我們可能需要擷取手機系統的一些資料,用來選擇相應的更新資料或者統計一些資料。擷取的資料越多,也就越利於我們給使用者提供更準確的更新選擇。
1 public class PhoneStatus {
2 //擷取手機的IMEI號
3 protected String getImei(Context ctx){
4 TelephonyManager telephonyManager=(TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE);
5 return telephonyManager.getDeviceId();
6 }
7 //獲得手機型號
8 protected String getModel(Context ctx) {
9 return android.os.Build.MODEL;
10 }
11 //獲得系統韌體版本
12 protected String getTarget(Context ctx) {
13 return android.os.Build.VERSION.RELEASE;
14 }
15 //獲得系統韌體版本號碼
16 protected String getSDK(Context ctx) {
17 return android.os.Build.VERSION.SDK;
18 }
19 }
拿到了這些資料我們只要交給伺服器,伺服器可以通過詳細資料判斷來決定返回的資料資訊。 拿到新版本apk的url後就可以通過系統Intent來下載安裝APK。