日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android应用自动更新功能实现使用AsyncTask!

發布時間:2025/4/16 Android 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android应用自动更新功能实现使用AsyncTask! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

我所開發應用不是面向大眾的應用,所以無法放到應用市場去讓大家下載,然后通過應用市場更新.所以我必要做一個應用自動更新功能.但是不難,Thanks to下面這篇博客:

Android應用自動更新功能的實現!!!

如果你是以前沒有做過此類功能,建議你先看上面的文章.然后再來看我的.因為我也是參考了上面的實現.


? 其實這個自動更新功能大體就是兩個三個步驟:

? ?(1)檢查更新

? ?(2)下載更新

? (3)安裝更新 ?

? ? 檢查更新和下載更新其實可以算是一步.因為都比較簡單,都是主要是下載.

? ? 1) 當你有新的版本發布時,在一個位置放一個更新的文件.

里面到少放有最新應用的版本號.然后你拿當前應用的版本號和服務器上的版本號對比,就知道要不要下載更新了.

? ?2 ) 下載這個過程,對于Java來說不是什么難事,因為Java提供了豐富的API.更何況Android內置了HttpClient可用.

? ?3) 這個,安裝過程,其實就是使用一個打開查看此下載文件的 Intent.


? 這時需要考慮的是文件下載后放到哪里,安全否.:

?一般就是先檢測SD卡.然后選擇一個合適的目錄.

private void checkUpdate() {RequestFileInfo requestFileInfo = new RequestFileInfo();requestFileInfo.fileUrl = "http://www.waitab.com/demo/demo.apk";String status = Environment.getExternalStorageState();if (!Environment.MEDIA_MOUNTED.equals(status)) {ToastUtils.showFailure(getApplicationContext(),"SDcard cannot use!");return;}requestFileInfo.saveFilePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();requestFileInfo.saveFileName = "DiTouchClient.apk";showHorizontalFragmentDialog(R.string.title_wait,R.string.title_download_update);new DownlaodUpdateTask().execute(requestFileInfo);}


上面的進度條顯示我已經封裝好的了.showHorizontalFragmentDialog()

顯然我使用了android-support-v4兼容包來使用Fragment的.


? 在進度條中有顯示,下載文件大小,已經下載了多少.速度等信息.

? ?由于涉及到網絡操作.所以把這整個邏輯放在AsyncTask中.?

代碼如下:

private class DownlaodUpdateTask extendsAsyncTask<RequestFileInfo, ProgressValue, BasicCallResult> {@Overrideprotected BasicCallResult doInBackground(RequestFileInfo... params) {final RequestFileInfo req = params[0];String apkFileName = "";try {URL url = new URL(req.fileUrl); // throw MalformedURLExceptionHttpURLConnection conn = (HttpURLConnection) url.openConnection();// throws IOExceptionLog.i(TAG, "response code:" + conn.getResponseCode());// 1檢查網絡連接性if (HttpURLConnection.HTTP_OK != conn.getResponseCode()) {return new BasicCallResult("Can not connect to the update Server! ", false);}int length = conn.getContentLength();double total = StringUtils.bytes2M(length);InputStream is = conn.getInputStream();File path = new File(req.saveFilePath);if (!path.exists())path.mkdir();File apkFile = new File(req.saveFilePath, req.saveFileName);apkFileName = apkFile.getAbsolutePath();FileOutputStream fos = new FileOutputStream(apkFile);ProgressValue progressValue = new ProgressValue(0, " downlaod…");int count = 0;long startTime, endTime;byte buffer[] = new byte[1024];do {startTime = System.currentTimeMillis();int numread = is.read(buffer);endTime = System.currentTimeMillis();count += numread;if (numread <= 0) {// publish endbreak;}fos.write(buffer, 0, numread);double kbPerSecond = Math.ceil((endTime - startTime) / 1000f);double current = StringUtils.bytes2M(count);progressValue.message = String.format("%.2f M/%.2f M\t\t%.2fKb/S", total, current,kbPerSecond);progressValue.progress = (int) (((float) count / length) * DialogUtil.LONG_PROGRESS_MAX);publishProgress(progressValue);} while (true);fos.flush();fos.close();} catch (MalformedURLException e) {e.printStackTrace();return new BasicCallResult("Wrong url! ", false);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();return new BasicCallResult("Error: " + e.getLocalizedMessage(),false);}BasicCallResult callResult = new BasicCallResult("download finish!", true);callResult.result = apkFileName;return callResult;}@Overrideprotected void onPostExecute(BasicCallResult result) {removeFragmentDialog();if (result.ok) {installApk(result.result);} else {ToastUtils.showFailure(getApplicationContext(), result.message);}}@Overrideprotected void onProgressUpdate(ProgressValue... values) {ProgressValue value = values[0];updateProgressDialog(value);}}/*** 安裝更新APK.* * @param fileUri*/private void installApk(String fileUri) {Intent intent = new Intent(Intent.ACTION_VIEW);intent.setDataAndType(Uri.parse("file://" + fileUri),"application/vnd.android.package-archive");startActivity(intent);this.finish();}



PS:Java中傳遞或者返回多個值,我常用的辦法就是將數據封裝到一個對象中去.上面用到的一些封裝對象如下:

傳遞多個值用對象是因為AsyncTask設計讓你傳遞一個對象作為傳遞參數,所以傳遞對象也需要這樣使用.


/*** 傳遞給android 設置進度條對象* * @author banxi1988* */ public final class ProgressValue {/*** 需要設置的進度*/public int progress;/*** 提示信息*/public String message;public ProgressValue(int progress, String message) {super();this.progress = progress;this.message = message;}}



基本的調用返回對象:

public class BasicCallResult {public String message;public boolean ok;public String result;public BasicCallResult(String message, boolean ok) {super();this.message = message;this.ok = ok;}}


傳遞下載相關信息..

public class RequestFileInfo {public String fileUrl;public String saveFilePath;public String saveFileName;}


??

? ??

今天更新到這里,有什么問題,請指出,謝謝.

?

轉載于:https://my.oschina.net/banxi/blog/57988

總結

以上是生活随笔為你收集整理的Android应用自动更新功能实现使用AsyncTask!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 手机看片91| 久久思| 极品美女销魂一区二区三区 | 亚洲综合婷婷久久 | 久久久久亚洲av成人网人人网站 | 久久网站免费观看 | 免费看av毛片 | 亚洲黄色大全 | 91丨porny| 麻豆网站视频 | av高清在线观看 | 日韩精品福利在线 | 久久免费高清视频 | 天天干天天草 | 亚洲综合婷婷 | 欧美另类精品xxxx孕妇 | 成人黄色小说视频 | 玉女心经 在线 | 天天操天天看 | 欧美成人手机视频 | 国产精品一区二区三区线羞羞网站 | 国产理论片在线观看 | www.亚洲一区二区 | 韩日一区二区三区 | 成年人网站av | 欧美日一区二区 | 1024毛片基地 | 91麻豆精品国产91久久久久久久久 | 亚洲精品久久久久av无码 | 久久久精品在线观看 | 国产精品自拍亚洲 | 草女人视频| 人妻一区二区视频 | 日批黄色 | 午夜一区在线观看 | 亚洲精品二三区 | 亚洲免费片 | 免费观看一区二区三区毛片 | 五月在线 | 暖暖日本在线 | 91视频99 | 乱xxxxx普通话对白 | 日韩专区第一页 | 婷婷丁香一区二区三区 | 在线视频 91 | 亚洲字幕av一区二区三区四区 | 人妻激情偷乱视频一区二区三区 | 97av超碰| 国产探花在线观看 | 欧美一区二区三区激情啪啪 | 国产亚洲精品精品精品 | 色丁香婷婷综合久久 | 射进来av影视网 | 亚洲天堂日韩在线 | 福利国产片 | 亚洲影视一区二区 | 岛国av在线播放 | 日韩经典av | 一本—道久久a久久精品蜜桃 | 国产亚洲精品av | 激情五月激情综合 | 国产欧美精品一区二区在线播放 | 美女高潮在线 | 日韩美女免费视频 | 国产中文久久 | 找个毛片看看 | 亚洲视频一区二区三区四区 | 精品一区二区久久久久久久网站 | jizz中国少妇 | 久久精品国产av一区二区三区 | 国产三级日本三级在线播放 | 免费av电影网站 | 中文在线字幕免 | 免费的黄色的视频 | 精品天堂 | 天天爽夜夜爽夜夜爽精品视频 | 色播五月激情 | 九九99精品 | 亚洲va韩国va欧美va | 另一种灿烂生活 | 久久精品国产视频 | 日本成人在线免费观看 | 欧美一区,二区 | 日本伦理一区 | 日韩av片在线免费观看 | 亚洲精品免费在线 | 2019亚洲男人天堂 | 丁香花电影免费播放在线观看 | 久久av网站 | 精彩毛片 | 欧美色视频在线 | 中国一级特黄毛片 | 国产精品自拍亚洲 | 一级全黄裸体免费观看视频 | 国产精品99一区二区三区 | 三级黄色免费网站 | 日韩午夜激情 | 午夜播放 | 久久aaa |