天天看點

Android 輕松實作背景搭建+APP版本更新

android 輕松實作背景搭建+app版本更新

看完本文,您可以學到:

1.版本更新的方法

2.與背景的互動

3.android中handler的使用

4.android中progressdialog的使用

話不多說,先來看看效果圖:

一、大緻思路闡述

首先,我們要有一個可以被手機通路的背景。

這裡有兩種方法,在調試的時候我們可以利用手機和筆記本連到同一個區域網路的方式,在電腦上開啟個類似php或者javaee一樣樣的背景服務。

但是對于沒有相關背景開發經驗的朋友,這裡有一種更好的方式:利用github等免費空間來實作。詳細請戳我的另一篇博文利用github建立你的個人網站 。

ok,有了存放資源的背景,我們要放點什麼東西呢?很簡單,一個包含最新版本資訊的update.txt檔案和一個.apk檔案足矣!

txt檔案裡寫啥?看下我的例子:

解釋一下: &是分隔符,用于手機端擷取到資訊後的分割。1.3代表着最新版本号,之後的是新版本的描述,最後的是新版本apk的下載下傳位址(這裡我用了區域網路)。一開始的是啥呢?我當時在試驗的時候,在開頭并沒有加額外資訊,即以1.3開頭,實驗之後,發現手機端擷取到txt文本資訊後不能正确解析,原因我覺得是因為txt檔案的開頭包含有一些自帶的字元,手機解析時會有問題。(感興趣的朋友可以去深究,還望不吝賜教!)

ok,有了新版本的資訊,我們要怎麼做?

我們要擷取到最新的版本号,然後與目前app的版本号進行對比。如果低于最新版本,就到下載下傳位址中去下載下傳。

二、詳細代碼解釋

首先,建立一個updateinfo類,用來與update.txt的内容對應,這個很簡單:

[java] view plaincopy

package com.example.appupdatedemo;

public class updateinfo

{

}

然後,寫一個類去擷取更新的資訊,即我們的update.txt檔案:

updateinfoservice:

import java.io.bufferedreader;

import java.io.inputstreamreader;

import java.net.httpurlconnection;

import java.net.url;

import android.content.context;

public class updateinfoservice {

這裡擷取檔案的方法是先建立一個httpurlconnection,再擷取輸入流。細心的朋友可能注意到其中有個類,叫getserverurl,這個類是用來存放背景位址資訊的:

/**

擷取伺服器ip位址

*/

public class getserverurl{

ok,到了這一步,準備工作都做完了,接下來隻剩一個類了!即我們的mainacticity,一共一百多行,我們分幾部分來講。

第一部分代碼,做的工作是擷取版本更新資訊。

public class mainactivity extends activity {

這裡我們用到了new thread+ handler的方式去進行異步加載版本資訊,主要是因為在安卓中要把耗時任務放在非主線程中執行,否則會造成阻塞,抛出無響應異常。還有另外的實作方式是安卓封裝的asynctask,具體可以參考這篇博文:android asynctask詳解。

第二部分,判斷是否是最新版本,如果不是,跳出對話框選擇是否更新:

private void showupdatedialog() {

private boolean isneedupdate() {

// 擷取目前版本的版本号

private string getversion() {

這段裡面要注意的是怎麼擷取目前版本,方法是使用packagemanager提供的getpackageinfo方法,傳回的是manifest檔案中的版本号。其他的代碼挺簡單,注釋也挺全的。如果有問題,歡迎留言。

接下來是最後一部分,下載下傳檔案。

//安裝檔案,一般固定寫法

這一段主要是利用progressdialog在下載下傳的時候實時更新進度,主要利用的是一個位元組數組的緩沖區。即每次擷取到的内容填滿緩沖區後就寫入到本地本件中。這裡我把緩沖區的大小設定為10個位元組(1024會比較好),理由是因為在同一個區域網路中速度特别快,刷一下就下載下傳完了,看不出進度條效果,緩沖區調小點就ok了。