用xutils3.0進行下載,xutils3.0進行下載
寫的例子比較簡單,是用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 block112 e.printStackTrace();113 }114 }115 });116 }117 118 /**119 * 120 * @param versionname121 * 地址中版本的名字122 * @param downloadurl123 * 下載包的地址124 * @param desc125 * 版本的描述126 */127 protected void setUpDialog(String versionname, final String downloadurl,128 String desc) {129 // TODO Auto-generated method stub130 AlertDialog dialog = new AlertDialog.Builder(this).setCancelable(false)131 .setTitle("下載" + versionname + "版本").setMessage(desc)132 .setNegativeButton("取消", null)133 .setPositiveButton("下載", new DialogInterface.OnClickListener() {134 135 @Override136 public void onClick(DialogInterface arg0, int arg1) {137 // TODO Auto-generated method stub138 setDownLoad(downloadurl);139 }140 }).create();141 dialog.show();142 }143 144 /**145 * 下載包146 * 147 * @param downloadurl148 * 下載的url149 * 150 */151 @SuppressLint("SdCardPath")152 protected void setDownLoad(String downloadurl) {153 // TODO Auto-generated method stub154 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 @Override160 public void onCancelled(CancelledException arg0) {161 // TODO Auto-generated method stub162 163 }164 165 @Override166 public void onError(Throwable arg0, boolean arg1) {167 // TODO Auto-generated method stub168 if(progressDialog!=null && progressDialog.isShowing()){169 progressDialog.dismiss();170 }171 System.out.println("提示更新失敗");172 }173 174 @Override175 public void onFinished() {176 // TODO Auto-generated method stub177 178 }179 180 @Override181 public void onSuccess(File arg0) {182 // TODO Auto-generated method stub183 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(Environment189 .getExternalStorageDirectory(), "demo.apk")),190 "application/vnd.android.package-archive");191 startActivity(intent);192 }193 194 @Override195 public void onLoading(long arg0, long arg1, boolean arg2) {196 // TODO Auto-generated method stub197 progressDialog.setMax((int)arg0);198 progressDialog.setProgress((int)arg1);199 }200 201 @Override202 public void onStarted() {203 // TODO Auto-generated method stub204 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 @Override213 public void onWaiting() {214 // TODO Auto-generated method stub215 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 }