用xutils3.0進行下載

来源:http://www.cnblogs.com/wangfengdange/archive/2016/08/03/5731656.html
-Advertisement-
Play Games

寫的例子比較簡單,是用xutils3.0來進行下載項目更新 1.先通過網路請求,判斷版本是否要更新 2.若要更新,則彈出一個彈窗,我用的是系統自帶的Dialog,將下載的版本號及下載的內容提示展示出來 3.當用戶點擊下載時,開始下載,下載時展示一個水平的進度條 4.下載完成後,進度條消失,調用系統安 ...


寫的例子比較簡單,是用xutils3.0來進行下載項目更新

1.先通過網路請求,判斷版本是否要更新

2.若要更新,則彈出一個彈窗,我用的是系統自帶的Dialog,將下載的版本號及下載的內容提示展示出來

3.當用戶點擊下載時,開始下載,下載時展示一個水平的進度條

4.下載完成後,進度條消失,調用系統安裝apk

如下是代碼  用到的xutils的jar包是3.3.32版本的

  1 package com.item.weixin;
  2 
  3 import java.io.File;
  4 
  5 import org.json.JSONException;
  6 import org.json.JSONObject;
  7 import org.xutils.x;
  8 import org.xutils.common.Callback;
  9 import org.xutils.http.RequestParams;
 10 
 11 import android.annotation.SuppressLint;
 12 import android.app.Activity;
 13 import android.app.AlertDialog;
 14 import android.app.ProgressDialog;
 15 import android.content.Context;
 16 import android.content.DialogInterface;
 17 import android.content.Intent;
 18 import android.content.pm.PackageInfo;
 19 import android.content.pm.PackageManager.NameNotFoundException;
 20 import android.net.Uri;
 21 import android.os.Bundle;
 22 import android.os.Environment;
 23 import android.view.View;
 24 import android.view.Window;
 25 import android.widget.Button;
 26 
 27 /**
 28  * 設置xutils下載
 29  * 
 30  * @author Administrator
 31  * 
 32  */
 33 public class LoginActivity extends Activity {
 34     private Button ll_update;
 35     private ProgressDialog pDialog;
 36     private String nowVersion;
 37     private ProgressDialog progressDialog;
 38 
 39     @Override
 40     protected void onCreate(Bundle savedInstanceState) {
 41         // TODO Auto-generated method stub
 42         super.onCreate(savedInstanceState);
 43         requestWindowFeature(Window.FEATURE_NO_TITLE);
 44         setContentView(R.layout.activity_login);
 45         ll_update = (Button) findViewById(R.id.btn_login);
 46         ll_update.setOnClickListener(new View.OnClickListener() {
 47 
 48             @Override
 49             public void onClick(View arg0) {
 50                 // TODO Auto-generated method stub
 51                 checkUpdate();
 52             }
 53         });
 54         try {
 55             PackageInfo packageInfo = getPackageManager().getPackageInfo(
 56                     getPackageName(), 0);
 57             nowVersion = packageInfo.versionName;
 58         } catch (NameNotFoundException e) {
 59             // TODO Auto-generated catch block
 60             e.printStackTrace();
 61         }
 62     }
 63 
 64     /**
 65      * 下載更新,
 66      */
 67     protected void checkUpdate() {
 68         // TODO Auto-generated method stub
 69         proDialogShow(LoginActivity.this, "正在查詢...");
 70         RequestParams params = new RequestParams("url");
 71         x.http().get(params, new Callback.CommonCallback<String>() {
 72 
 73             @Override
 74             public void onCancelled(CancelledException arg0) {
 75                 // TODO Auto-generated method stub
 76 
 77             }
 78 
 79             @Override
 80             public void onError(Throwable arg0, boolean arg1) {
 81                 // TODO Auto-generated method stub
 82                 PDialogHide();
 83                 System.out.println("提示網路錯誤");
 84             }
 85 
 86             @Override
 87             public void onFinished() {
 88                 // TODO Auto-generated method stub
 89 
 90             }
 91 
 92             @Override
 93             public void onSuccess(String arg0) {
 94                 // TODO Auto-generated method stub
 95                 PDialogHide();
 96                 try {
 97                     JSONObject object = new JSONObject(arg0);
 98                     boolean success = object.getBoolean("succee");
 99                     if (success) {
100                         String desc = object.getString("desc");
101                         String downloadurl = object.getString("downloadurl");
102                         String versionname = object.getString("versionname");
103                         if (nowVersion.equals(versionname)) {
104                             System.out.println("當前版本為最新,不用跟新");
105                         } else {
106                             // 不同,彈出更新提示對話框
107                             setUpDialog(versionname, downloadurl, desc);
108                         }
109                     }
110                 } catch (JSONException e) {
111                     // TODO Auto-generated catch block
112                     e.printStackTrace();
113                 }
114             }
115         });
116     }
117 
118     /**
119      * 
120      * @param versionname
121      *            地址中版本的名字
122      * @param downloadurl
123      *            下載包的地址
124      * @param desc
125      *            版本的描述
126      */
127     protected void setUpDialog(String versionname, final String downloadurl,
128             String desc) {
129         // TODO Auto-generated method stub
130         AlertDialog dialog = new AlertDialog.Builder(this).setCancelable(false)
131                 .setTitle("下載" + versionname + "版本").setMessage(desc)
132                 .setNegativeButton("取消", null)
133                 .setPositiveButton("下載", new DialogInterface.OnClickListener() {
134 
135                     @Override
136                     public void onClick(DialogInterface arg0, int arg1) {
137                         // TODO Auto-generated method stub
138                         setDownLoad(downloadurl);
139                     }
140                 }).create();
141         dialog.show();
142     }
143 
144     /**
145      * 下載包
146      * 
147      * @param downloadurl
148      *            下載的url
149      * 
150      */
151     @SuppressLint("SdCardPath")
152     protected void setDownLoad(String downloadurl) {
153         // TODO Auto-generated method stub
154         RequestParams params = new RequestParams(downloadurl);
155         params.setAutoRename(true);//斷點下載
156         params.setSaveFilePath("/mnt/sdcard/demo.apk");
157         x.http().get(params, new Callback.ProgressCallback<File>() {
158 
159             @Override
160             public void onCancelled(CancelledException arg0) {
161                 // TODO Auto-generated method stub
162                 
163             }
164 
165             @Override
166             public void onError(Throwable arg0, boolean arg1) {
167                 // TODO Auto-generated method stub
168                 if(progressDialog!=null && progressDialog.isShowing()){
169                     progressDialog.dismiss();
170                 }
171                 System.out.println("提示更新失敗");
172             }
173 
174             @Override
175             public void onFinished() {
176                 // TODO Auto-generated method stub
177                 
178             }
179 
180             @Override
181             public void onSuccess(File arg0) {
182                 // TODO Auto-generated method stub
183                 if(progressDialog!=null && progressDialog.isShowing()){
184                     progressDialog.dismiss();
185                 }
186                 Intent intent = new Intent(Intent.ACTION_VIEW);
187                 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
188                 intent.setDataAndType(Uri.fromFile(new File(Environment
189                         .getExternalStorageDirectory(), "demo.apk")),
190                         "application/vnd.android.package-archive");
191                 startActivity(intent);
192             }
193 
194             @Override
195             public void onLoading(long arg0, long arg1, boolean arg2) {
196                 // TODO Auto-generated method stub
197                 progressDialog.setMax((int)arg0);
198                 progressDialog.setProgress((int)arg1);
199             }
200 
201             @Override
202             public void onStarted() {
203                 // TODO Auto-generated method stub
204                 System.out.println("開始下載");
205                 progressDialog = new ProgressDialog(LoginActivity.this);
206                 progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//設置為水平進行條
207                 progressDialog.setMessage("正在下載中...");
208                 progressDialog.setProgress(0);
209                 progressDialog.show();
210             }
211 
212             @Override
213             public void onWaiting() {
214                 // TODO Auto-generated method stub
215                 
216             }
217         });
218     }
219 
220     private void proDialogShow(Context context, String msg) {
221         pDialog = new ProgressDialog(context);
222         pDialog.setMessage(msg);
223         // pDialog.setCancelable(false);
224         pDialog.show();
225     }
226 
227     private void PDialogHide() {
228         try {
229             if (pDialog != null && pDialog.isShowing()) {
230                 pDialog.dismiss();
231             }
232         } catch (Exception e) {
233             e.printStackTrace();
234         }
235     }
236 }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 該博文出自:http://www.cnblogs.com/yang-guang-girl/p/5683454.html 輸出 ...
  • androidstudio報錯, Unsupported major.minor version 52.0 ...
  • 使用osChina分支的創建分為兩種 1.直接在osChina上創建 需要pull否則查看git的狀態是不包含改分支的; 2.使用git命令創建分支 需要push否則查看osChina的分支的是不包含改分支的; 查看git下的所有分支 --online不是必須的,只是加上之後數據顯示會精簡很多。 " ...
  • 一個APP的需求來自於哪兒?產品、老闆、客戶….. 做程式員不容易,需求一句話,就是幾千幾萬行代碼!所幸,在AppCan平臺開發APP,開發者只需完成應用的前端部分,至於各項複雜的功能,就交給AppCan來搞定吧! ...
  • 最近項目中經常有遇到從伺服器請求的數據是null的情況,這種情況下如果用[dic objectForKey:@"key"]方法,程式會發生崩潰現象,因為項目是以前的老項目,而且有太多個這樣的方法,於是想起了前幾天的runtime知識,嘗試簡單的實現了一個交換方法。 1.首先實現了一個字典的分類。 2 ...
  • 1:iOS SEL的簡單總結 SEL就是對方法的一種包裝。包裝的SEL類型數據它對應相應的方法地址,找到方法地址就可以調用方法 a.方法的存儲位置 在記憶體中每個類的方法都存儲在類對象中 每個方法都有一個與之對應的SEL類型的數據 根據一個SEL數據就可以找到對應的方法地址,進而調用方法 SEL類型的 ...
  • Mobile What to Expect From Swift 3 Web A practical security guide for web developers Gulp Succinctly – free book Running Node.js on Linux With systemd... ...
  • 文件下載主要代碼也不多,使用原生的DownloadManage來實現該功能: AndroidManifest中添加許可權 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:na ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...