用xutils3.0進(jìn)行下載項(xiàng)目更新
xUtils簡介
xUtils 包含了很多實(shí)用的android工具。
xUtils 支持大文件上傳,更全面的http請求協(xié)議支持(10種謂詞),擁有更加靈活的ORM,更多的事件注解支持且不受混淆影響...
xUitls 最低兼容android 2.2 (api level 8)
目前xUtils主要有四大模塊:
DbUtils模塊:
android中的orm框架,一行代碼就可以進(jìn)行增刪改查;
支持事務(wù),默認(rèn)關(guān)閉;
可通過注解自定義表名,列名,外鍵,唯一性約束,NOT NULL約束,CHECK約束等(需要混淆的時(shí)候請注解表名和列名);
支持綁定外鍵,保存實(shí)體時(shí)外鍵關(guān)聯(lián)實(shí)體自動(dòng)保存或更新;
自動(dòng)加載外鍵關(guān)聯(lián)實(shí)體,支持延時(shí)加載;
支持鏈?zhǔn)奖磉_(dá)查詢,更直觀的查詢語義,參考下面的介紹或sample中的例子。
ViewUtils模塊:
android中的ioc框架,完全注解方式就可以進(jìn)行UI,資源和事件綁定;
新的事件綁定方式,使用混淆工具混淆后仍可正常工作;
目前支持常用的20種事件綁定,參見ViewCommonEventListener類和包c(diǎn)om.lidroid.xutils.view.annotation.event。
HttpUtils模塊:
支持同步,異步方式的請求;
支持大文件上傳,上傳大文件不會(huì)oom;
支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT請求;
下載支持301/302重定向,支持設(shè)置是否根據(jù)Content-Disposition重命名下載的文件;
返回文本內(nèi)容的請求(默認(rèn)只啟用了GET請求)支持緩存,可設(shè)置默認(rèn)過期時(shí)間和針對當(dāng)前請求的過期時(shí)間。
BitmapUtils模塊:
加載bitmap的時(shí)候無需考慮bitmap加載過程中出現(xiàn)的oom和android容器快速滑動(dòng)時(shí)候出現(xiàn)的圖片錯(cuò)位等現(xiàn)象;
支持加載網(wǎng)絡(luò)圖片和本地圖片;
內(nèi)存管理使用lru算法,更好的管理bitmap內(nèi)存;
可配置線程加載線程數(shù)量,緩存大小,緩存路徑,加載顯示動(dòng)畫等...
以上說這么多都是為下文做鋪墊,下面步入主題:
寫的例子比較簡單,是用xutils3.0來進(jìn)行下載項(xiàng)目更新
1.先通過網(wǎng)絡(luò)請求,判斷版本是否要更新
2.若要更新,則彈出一個(gè)彈窗,我用的是系統(tǒng)自帶的Dialog,將下載的版本號及下載的內(nèi)容提示展示出來
3.當(dāng)用戶點(diǎn)擊下載時(shí),開始下載,下載時(shí)展示一個(gè)水平的進(jìn)度條
4.下載完成后,進(jìn)度條消失,調(diào)用系統(tǒng)安裝apk
如下是代碼 用到的xutils的jar包是3.3.32版本的
package com.item.weixin;
import java.io.File;
import org.json.JSONException;
import org.json.JSONObject;
import org.xutils.x;
import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.Window;
import android.widget.Button;
/**
* 設(shè)置xutils下載
*
* @author Administrator
*
*/
public class LoginActivity extends Activity {
private Button ll_update;
private ProgressDialog pDialog;
private String nowVersion;
private ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_login);
ll_update = (Button) findViewById(R.id.btn_login);
ll_update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
checkUpdate();
}
});
try {
PackageInfo packageInfo = getPackageManager().getPackageInfo(
getPackageName(), 0);
nowVersion = packageInfo.versionName;
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 下載更新,
*/
protected void checkUpdate() {
// TODO Auto-generated method stub
proDialogShow(LoginActivity.this, "正在查詢...");
RequestParams params = new RequestParams("url");
x.http().get(params, new Callback.CommonCallback<String>() {
@Override
public void onCancelled(CancelledException arg0) {
// TODO Auto-generated method stub
}
@Override
public void onError(Throwable arg0, boolean arg1) {
// TODO Auto-generated method stub
PDialogHide();
System.out.println("提示網(wǎng)絡(luò)錯(cuò)誤");
}
@Override
public void onFinished() {
// TODO Auto-generated method stub
}
@Override
public void onSuccess(String arg0) {
// TODO Auto-generated method stub
PDialogHide();
try {
JSONObject object = new JSONObject(arg0);
boolean success = object.getBoolean("succee");
if (success) {
String desc = object.getString("desc");
String downloadurl = object.getString("downloadurl");
String versionname = object.getString("versionname");
if (nowVersion.equals(versionname)) {
System.out.println("當(dāng)前版本為最新,不用跟新");
} else {
// 不同,彈出更新提示對話框
setUpDialog(versionname, downloadurl, desc);
}
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
/**
*
* @param versionname
* 地址中版本的名字
* @param downloadurl
* 下載包的地址
* @param desc
* 版本的描述
*/
protected void setUpDialog(String versionname, final String downloadurl,
String desc) {
// TODO Auto-generated method stub
AlertDialog dialog = new AlertDialog.Builder(this).setCancelable(false)
.setTitle("下載" + versionname + "版本").setMessage(desc)
.setNegativeButton("取消", null)
.setPositiveButton("下載", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
setDownLoad(downloadurl);
}
}).create();
dialog.show();
}
/**
* 下載包
*
* @param downloadurl
* 下載的url
*
*/
@SuppressLint("SdCardPath")
protected void setDownLoad(String downloadurl) {
// TODO Auto-generated method stub
RequestParams params = new RequestParams(downloadurl);
params.setAutoRename(true);//斷點(diǎn)下載
params.setSaveFilePath("/mnt/sdcard/demo.apk");
x.http().get(params, new Callback.ProgressCallback<File>() {
@Override
public void onCancelled(CancelledException arg0) {
// TODO Auto-generated method stub
}
@Override
public void onError(Throwable arg0, boolean arg1) {
// TODO Auto-generated method stub
if(progressDialog!=null && progressDialog.isShowing()){
progressDialog.dismiss();
}
System.out.println("提示更新失敗");
}
@Override
public void onFinished() {
// TODO Auto-generated method stub
}
@Override
public void onSuccess(File arg0) {
// TODO Auto-generated method stub
if(progressDialog!=null && progressDialog.isShowing()){
progressDialog.dismiss();
}
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(Uri.fromFile(new File(Environment
.getExternalStorageDirectory(), "demo.apk")),
"application/vnd.android.package-archive");
startActivity(intent);
}
@Override
public void onLoading(long arg0, long arg1, boolean arg2) {
// TODO Auto-generated method stub
progressDialog.setMax((int)arg0);
progressDialog.setProgress((int)arg1);
}
@Override
public void onStarted() {
// TODO Auto-generated method stub
System.out.println("開始下載");
progressDialog = new ProgressDialog(LoginActivity.this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//設(shè)置為水平進(jìn)行條
progressDialog.setMessage("正在下載中...");
progressDialog.setProgress(0);
progressDialog.show();
}
@Override
public void onWaiting() {
// TODO Auto-generated method stub
}
});
}
private void proDialogShow(Context context, String msg) {
pDialog = new ProgressDialog(context);
pDialog.setMessage(msg);
// pDialog.setCancelable(false);
pDialog.show();
}
private void PDialogHide() {
try {
if (pDialog != null && pDialog.isShowing()) {
pDialog.dismiss();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
以上所述是小編給大家介紹的用xutils3.0進(jìn)行下載項(xiàng)目更新,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- xUtils3.0框架學(xué)習(xí)筆記分享
- Java常用正則表達(dá)式驗(yàn)證工具類RegexUtils.java
- Android XUtils3框架的基本使用方法(二)
- Android中XUtils3框架使用方法詳解(一)
- Android xUtils更新到3.0后的基本使用規(guī)則詳解
- 使用Android的OkHttp包實(shí)現(xiàn)基于HTTP協(xié)議的文件上傳下載
- Android基于Http協(xié)議實(shí)現(xiàn)文件上傳功能的方法
- android文件上傳示例分享(android圖片上傳)
- Android中發(fā)送Http請求(包括文件上傳、servlet接收)的實(shí)例代碼
- Android使用xUtils3.0實(shí)現(xiàn)文件上傳
相關(guān)文章
Android使用ViewPager實(shí)現(xiàn)啟動(dòng)引導(dǎo)頁
這篇文章主要為大家詳細(xì)介紹了Android使用ViewPager實(shí)現(xiàn)第一次啟動(dòng)引導(dǎo)頁,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-07-07
android 對話框彈出位置和透明度的設(shè)置具體實(shí)現(xiàn)方法
在android中我們經(jīng)常會(huì)用AlertDialog來顯示對話框。通過這個(gè)對話框是顯示在屏幕中心的。但在某些程序中,要求對話框可以顯示在不同的位置。2013-07-07
Android實(shí)現(xiàn)瘋狂連連看游戲之開發(fā)游戲界面(二)
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)瘋狂連連看游戲之開發(fā)游戲界面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
Android開發(fā)自定義TextView省略號樣式的方法
這篇文章主要介紹了Android開發(fā)自定義TextView省略號樣式的方法,結(jié)合實(shí)例形式分析了Android文本控件TextView相關(guān)屬性與字符串操作技巧,需要的朋友可以參考下2017-10-10
Android不使用自定義布局情況下實(shí)現(xiàn)自定義通知欄圖標(biāo)的方法
這篇文章主要介紹了Android不使用自定義布局情況下實(shí)現(xiàn)自定義通知欄圖標(biāo)的方法,實(shí)例分析了Android通知欄圖標(biāo)的創(chuàng)建技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-12-12
Android開發(fā) -- UI界面之threme和style
做Java的人一般都做過CSS,我們都知道它也有一個(gè)樣式,Android中的樣式也可以進(jìn)行類比。2016-06-06
android調(diào)用C語言實(shí)現(xiàn)內(nèi)存的讀取與修改的方法示例
這篇文章主要介紹了android調(diào)用C語言實(shí)現(xiàn)內(nèi)存的讀取與修改的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
Android通過代碼控制ListView上下滾動(dòng)的方法
今天小編就為大家分享一篇關(guān)于Android通過代碼控制ListView上下滾動(dòng)的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12
Android中兩個(gè)類讓你再也不用實(shí)現(xiàn)onActivityResult()
這篇文章主要給大家介紹了關(guān)于Android中兩個(gè)類讓你再也不用實(shí)現(xiàn)onActivityResult()的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧2018-08-08

