用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 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 }
时间: 2024-10-14 14:05:30

用xutils3.0进行下载的相关文章

xUtils3.0框架学习笔记

xUtils是开速开发安卓项目的开源框架,开源项目地址:https://github.com/wyouflf/xUtils3.使用起来非常方便.主要功能包括: xUtils 支持超大文件(超过2G)上传,更全面的http请求协议支持(11种谓词). 拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响. 图片绑定支持gif(受系统兼容性影响, 部分gif文件只能静态显示), webp; 支持圆角, 圆形, 方形等裁剪, 支持自动旋转等. 数据库api简化提高性能, 达到和greenDao一致的

NetCore 1.0 Release 下载

NetCore 1.0 Release 下载地址: http://pan.baidu.com/s/1c1G2SRQ **SDK** 为SDK,其他的是Runtime.

MyEclipse7.0破解下载

MyEclipse7.0 下载地址:downloads.myeclipseide.com/downloads/products/eworkbench/7.0M1/MyEclipse_7.0M1_E3.4.0_Installer.exe http://downloads.myeclipseide.com/downloads/products/eworkbench/7.0M1/MyEclipse_7.0M1_E3.4.0_Installer.exe 1.建立java Project,随意取个名字即可

Android xUtils3.0使用手册(二) - 数据库操作

步骤:  (1). 创建数据表: (2). DaoConfig 获取数据库的配置信息: (3).  获取数据库实例:  x.getDb(daoConfig); (4). 数据库的增删改查. 1. 创建数据表 在这里要强调的是,数据库里面表的创建的时间,只有在你对数据库里面的操作涉及到这张表的操作时,会先判断当前的表是否存在,如果不存在,才会创建一张表,如果存在,才会进行相应的CRUD操作. 1 @Table(name = "person") 2 public class person

OpenCV3.1.0的下载、安装和配置

作者:大曲曲 邮箱:[email protected] 本文最终目标:要实现VS2015+QT5+OpenCV3开发环境搭建 1.任务描述 准备配置的环境 电脑系统:Windows 10 专业版 OpenCV版本:3.1.0 Visual Studio版本:2015 在配置OpenCV3之前,需要先把VS2015安装好.本文默认已经安装了VS2015. 如果没有安装VS2015,请参考我的博客中的关于 VS2015的下载和安装的内容:http://blog.csdn.net/quxiaoxia1

firebug2.0.7 下载

直接浏览器安装firebug装不了 新安装火狐,发现直接浏览器中进入扩展搜索firebug2.0.7下载安装不了.这个下载安装即可 下载地址: http://down.51cto.com/data/1975800

(原创)PL/SQL8.0.4下载/安装

PL/SQL8.0.4cn 下载地址: http://pan.baidu.com/s/1gSokX 解压安装即可. 打开软件会提示: Windows 64位下装Oracle 11g 64位,PLSQL Developer使用出现以下问题: 1.Database下拉框为空: 2.强制输入用户名.密码及Database,登录弹出: Initialzation error Could not initialize "...." Make sure you have the 32 bits O

解决IIS6.0无法下载Office 2007文件格式(ex:docx)的问题

最近在写有关文件上下载的程序.... 发现将Office 2007文件格式(例如docx档)的文件上传到server端是ok的... 但从client端要下载回来,却发生了错误的现象.... 最后到网络找了一下数据.才知道在IIS6.0要下载office 2007格式的文件 要先到IIS管理员→网站→右键[内容]→HTTP标头→MIME类型→新增→ 副文件名:.docx MIME类型:application/vnd.openxmlformats-officedocument.wordproces

silverlight 2.0 Beta1 下载

摘要:silverlight 2.0 Beta1 下载 silverlight 2.0 Beta1 下载 http://www.microsoft.com/silverlight/resources/InstallationFiles.aspx?v=2.0 Silverlight 2 Beta 1 系统需求与文档资源 下载Silverlight 2 Beta 1 (Windows版) http://www.microsoft.com/silverlight/handlers/getSilverl