




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Android程序的版本檢測(cè)與更新 做個(gè)網(wǎng)站的安卓客戶端,用戶安裝到自己手機(jī)上,如果我出了新版本怎么辦呢?要有版本更新功能。本來版本檢測(cè)最好可以自動(dòng)進(jìn)行。但如果每次開啟程序,都要先檢測(cè)一輪,是一種浪費(fèi),畢竟版本更新是小概率的事情?;蛟S可以程序開啟的時(shí)候,判斷一下時(shí)間,單日就檢測(cè),雙日就不檢測(cè),或者隨機(jī)什么的,降低一下檢測(cè)的頻率?我采取的做法是將檢測(cè)功能做到了菜單上,用戶有需要,就手動(dòng)打開自己檢測(cè)一下。反正我們這個(gè)是網(wǎng)站客戶端,有版本更新,在網(wǎng)站上發(fā)個(gè)通告就行了。版本檢測(cè)與更新有以下幾個(gè)關(guān)鍵步驟:1、檢測(cè)有無新版本2、下載新版本3、安裝替換新版本我處理的方案是1、在assets文件夾新增一個(gè)文件
2、:ver.cfg,記錄版本信息,純文本格式,內(nèi)容只有一句話:Version=1.0這個(gè)會(huì)隨安裝包裝到用戶的手機(jī)上然后在網(wǎng)站里面,設(shè)置一XML文件ver_apk.xml,內(nèi)容也只有這么一點(diǎn):<?xml version="1.0" encoding="utf-8" ?><string>1.0</string>檢測(cè)的時(shí)候,就先訪問網(wǎng)站的這個(gè)XML,得到最新版本號(hào),然后與手機(jī)上的ver.cfg文件里記錄的進(jìn)行比對(duì),不同的話就可以認(rèn)為存在新版本,提示進(jìn)行更新。2、下載的話就是直接下載的,我還不知道怎么弄斷點(diǎn)續(xù)傳3、安裝替換,關(guān)鍵
3、在于簽名。就是每個(gè)版本的簽名要保持一致。否則新的無法替換舊的,提示安裝未完成。- 天氣太冷,咯咯咯 -這個(gè)功能做在菜單上,觸發(fā)代碼如下:/=/ 菜單/= Overridepublic boolean onCreateOptionsMenu(Menu menu) menu.add(Menu.NONE, Menu.FIRST + 1, 5, "檢測(cè)更新").setIcon( return true;Overridepublic boolean onOptionsItemSelected(MenuItem item) switch (item.getItemId() case M
4、enu.FIRST + 1: Toast.makeText(this, "正在檢測(cè)版本", Toast.LENGTH_LONG).show(); UpdateVer uv = new UpdateVer(urlApk,urlVer,MainActivity.this); uv.checkVer(); break; case Menu.FIRST + 2: confirmExit(); break; return false;檢測(cè)更新因?yàn)榇a比較多,寫成一個(gè)類進(jìn)行封裝UpdateVer.javapackage android.*;public class UpdateVer
5、extends Activity private static final String TAG = "DOWNLOADAPK" private String PastVersion; private String NowVersion; public ProgressDialog pBar; private String currentFilePath = "" private String fileEx="" private String fileNa="" private String strURL=&quo
6、t;" private String VersionUri ="" private Context mContext; private final String fileVer = "ver.cfg" public UpdateVer(String urlapk,String urlver,final Context context) SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); String ver = "?ver=" + d
7、f.format(new Date();/主要是避開手機(jī)的緩存 strURL = urlapk + ver; VersionUri = urlver + ver; mContext = context; public void checkVer() / 解析Version網(wǎng)頁(yè),獲取版本號(hào) getVersionxml(VersionUri); private void compareVer() load(); /當(dāng)有最新版本的時(shí)候 if(PastVersion != null && !PastVersion.equals(NowVersion) Dialog dialog = n
8、ew AlertDialog.Builder(mContext).setTitle("系統(tǒng)更新") .setMessage(String.format("發(fā)現(xiàn)新版本%s,目前版本為%s,請(qǐng)更新!",NowVersion,PastVersion)/ 設(shè)置內(nèi)容 / 設(shè)置確定按鈕 .setPositiveButton("確定" ,new DialogInterface.OnClickListener() Override public void onClick(DialogInterface dialog, int which) pBar
9、= new ProgressDialog(mContext); pBar.setTitle("正在下載"); pBar.setMessage("請(qǐng)稍候."); pBar.setProgressStyle(ProgressDialog.STYLE_SPINNER); fileEx = strURL.substring(strURL.lastIndexOf(".") + 1,strURL.length().toLowerCase(); fileEx = fileEx.substring(0,fileEx.lastIndexOf("
10、;?"); fileNa = strURL.substring(strURL.lastIndexOf("/") + 1,strURL.lastIndexOf("."); getFile(strURL); ).setNegativeButton("取消", new DialogInterface.OnClickListener() Override public void onClick(DialogInterface dialog, int whichButton) / 點(diǎn)擊"取消"按鈕之后退出程序 ).
11、create();/ 創(chuàng)建 / 顯示對(duì)話框 dialog.show(); else Toast.makeText(mContext, String.format("當(dāng)前為最新版本%s",PastVersion), Toast.LENGTH_LONG).show(); private void getFile(final String strPath) pBar.show(); try if (strPath.equals(currentFilePath) ) getDataSource(strPath); currentFilePath = strPath; Runnabl
12、e r = new Runnable() Override public void run() try getDataSource(strPath); catch (Exception e) Log.e(TAG, e.getMessage(), e); ; new Thread(r).start(); catch(Exception e) e.printStackTrace(); /*取得遠(yuǎn)程文件*/ private void getDataSource(String strPath) throws Exception if (!URLUtil.isNetworkUrl(strPath) Lo
13、g.d("Tag","error"); else /*取得URL*/ URL myURL = new URL(strPath); /*建立聯(lián)機(jī)*/ URLConnection conn = myURL.openConnection(); conn.connect(); /*InputStream 下載文件*/ InputStream is = conn.getInputStream(); if (is = null) Log.d("tag","error"); throw new RuntimeException(
14、"沒有讀取到文件內(nèi)容"); /*建立臨時(shí)文件*/ File myTempFile = File.createTempFile(fileNa, "." + fileEx); myTempFile.getAbsolutePath(); /*將文件寫入臨時(shí)盤*/ FileOutputStream fos = new FileOutputStream(myTempFile); byte buf = new byte128; do int numread = is.read(buf); if (numread <= 0) break; fos.write(b
15、uf, 0, numread); while (true); /*打開文件進(jìn)行安裝*/ openFile(myTempFile); try is.close(); catch (Exception ex) Log.d("Tag","error"); Log.e(TAG, "error: " + ex.getMessage(), ex); /* 在手機(jī)上打開文件 */ private void openFile(File f) pBar.cancel(); Intent intent = new Intent(); intent.add
16、Flags(Intent.FLAG_ACTIVITY_NEW_TASK); /* 調(diào)用getMIMEType()來取得MimeType */ String type = getMIMEType(f); /* 設(shè)定intent的file與MimeType */ intent.setDataAndType(Uri.fromFile(f),type); mContext.startActivity(intent); /* 判斷文件MimeType的method */ private String getMIMEType(File f) String type = "" Strin
17、g fName = f.getName(); /* 取得擴(kuò)展名 */ String end = fName.substring(fName.lastIndexOf(".")+1,fName.length().toLowerCase(); /* 按擴(kuò)展名的類型決定MimeType */ if(end.equals("m4a") | end.equals("mp3") | end.equals("mid") | end.equals("xmf") | end.equals("ogg&quo
18、t;) | end.equals("wav") type = "audio" else if(end.equals("3gp") | end.equals("mp4") type = "video" else if(end.equals("jpg") | end.equals("gif") | end.equals("png") | end.equals("jpeg") | end.equals("bmp&
19、quot;) type = "image" else if(end.equals("apk") else type = "*" /*如果無法直接打開,就跳出軟件清單給使用者選擇 */ if(!end.equals("apk") type += "/*" return type; private void getVersionxml(String resourceUrl) GetVer gv = new GetVer(); gv.execute(resourceUrl); private bool
20、ean load() Properties properties = new Properties(); try InputStream stream = mContext.getAssets().open(fileVer); /FileInputStream stream = mContext.openFileInput(fileVer); /讀取文件內(nèi)容 properties.load(stream); catch (FileNotFoundException e) return false; catch(IOException e) return false; catch(Exception e) return false; PastVersion = String.valueOf(properti
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 營(yíng)口市防范區(qū)管理辦法
- 科研產(chǎn)品維護(hù)管理辦法
- 西安拆遷評(píng)估管理辦法
- 徐州工地消防管理辦法
- 道路工程法務(wù)培訓(xùn)課件
- 培訓(xùn)課件設(shè)計(jì)的方案
- 肝膽外科護(hù)理課件
- 第一次學(xué)習(xí)比賽數(shù)學(xué)試卷
- 高二梅州市聯(lián)考數(shù)學(xué)試卷
- 高三返校考數(shù)學(xué)試卷
- 教育政策學(xué)全套課件
- 2025至2030年中國(guó)高速公路廣告行業(yè)市場(chǎng)行情監(jiān)測(cè)及投資前景展望報(bào)告
- 識(shí)別心內(nèi)科護(hù)理高風(fēng)險(xiǎn)
- 2025年 嘉峪關(guān)市招聘編制外聘用制教師筆試試卷附答案
- 2025河南省豫地科技集團(tuán)社會(huì)招聘169人筆試參考題庫(kù)附帶答案詳解析集合
- 【北京市人社局】2025年北京市人力資源市場(chǎng)薪酬數(shù)據(jù)報(bào)告(一季度)
- 2024年09月2024秋季中國(guó)工商銀行湖南分行校園招聘620人筆試歷年參考題庫(kù)附帶答案詳解
- 牧場(chǎng)物語(yǔ)-礦石鎮(zhèn)的伙伴們-完全攻略
- 人教版物理八年級(jí)下冊(cè)知識(shí)點(diǎn)梳理復(fù)習(xí)課件
- (高清版)TDT 1068-2022 國(guó)土空間生態(tài)保護(hù)修復(fù)工程實(shí)施方案編制規(guī)程
- 六年級(jí)上冊(cè)書法教案
評(píng)論
0/150
提交評(píng)論