您的位置:首页 > 移动开发 > Android开发

android apk的更新下载

2016-01-29 14:33 281 查看
package com.ys.download;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.MalformedURLException;

import java.net.URL;

import java.util.HashMap;

import java.util.concurrent.TimeUnit;

import org.json.JSONArray;

import org.json.JSONObject;

import android.app.Activity;

import android.os.Bundle;

import android.os.Environment;

import android.os.Handler;

import android.os.Message;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.ProgressBar;

import com.squareup.okhttp.Callback;

import com.squareup.okhttp.FormEncodingBuilder;

import com.squareup.okhttp.OkHttpClient;

import com.squareup.okhttp.Request;

import com.squareup.okhttp.Response;

import com.ys.viewpagerproject.R;

public class MainActivity extends Activity implements OnClickListener {

private Button btn_download;

private ProgressBar down_progressBar;

private OkHttpClient httpClient;

private Request request;

private String download_url;

public static String VERSIONUPDATE = "https://www.32gold.com/versionInter/listVersionInter.action";

public String str = "http://www.baidu.com";

private String mSavePath;

private int progress;

private Handler mHandler = new Handler() {

public void handleMessage(android.os.Message msg) {

super.handleMessage(msg);

if (msg.what == 1) {

Log.e("info", msg.obj.toString());

try {

JSONObject jsonObject = new JSONObject(msg.obj.toString());

JSONObject data = jsonObject.getJSONObject("data");

JSONArray version_list = data.getJSONArray("versionList");

for (int i = 0; i < version_list.length(); i++) {

JSONObject version = version_list.getJSONObject(i);

download_url = version.getString("url1");

}

} catch (Exception e) {

e.printStackTrace();

}

if (download_url != null) {

Log.e("info", download_url + "downloadurl");

downloadAPK(download_url);

}

}else if(msg.what==2){

down_progressBar.setProgress((Integer)msg.obj);

}

}

};

private void downloadAPK(final String urlStr) {

new Thread(new Runnable() {

@Override

public void run() {

try {

// 判断SD卡是否存在,并且是否具有读写权限

if (Environment.getExternalStorageState().equals(

Environment.MEDIA_MOUNTED)) {

// 获得存储卡的路径

String sdpath = Environment

.getExternalStorageDirectory().getAbsolutePath() + "/";

mSavePath = sdpath + "csj";

URL url = new URL(urlStr);

// 创建连接

HttpURLConnection conn = (HttpURLConnection) url

.openConnection();

//conn.connect();

conn.setDoInput(true);

conn.setDoOutput(true);

conn.setRequestMethod("GET");

Log.e("info","执行了");

// 获取文件大小

int length = conn.getContentLength();

// 创建输入流

InputStream is = conn.getInputStream();

File file = new File(mSavePath);

// 判断文件目录是否存在

if (!file.exists()) {

Log.e("info","创建了目录");

file.mkdir();

}

File apkFile = new File(mSavePath, "apk");

FileOutputStream fos = new FileOutputStream(apkFile);

int count = 0;

// 缓存

byte buf[] = new byte[1024];

// 写入到文件中

do {

int numread = is.read(buf);

Log.e("info","创建了目录"+numread);

count += numread;

// 计算进度条位置

progress = (int) (((float) count / length) * 100);

Log.e("InfoProgress",progress+"");

// 更新进度

Message msg = Message.obtain();

msg.what = 2;

msg.obj = progress;

mHandler.sendMessage(msg);

if (numread <= 0) {

// 下载完成

mHandler.sendEmptyMessage(3);

break;

}

// 写入文件

fos.write(buf, 0, numread);

fos.flush();

} while (true);// 点击取消就停止下载.

fos.close();

is.close();

}

} catch (MalformedURLException e) {

e.printStackTrace();

Log.e("info","异常");

} catch (IOException e) {

Log.e("info","异常");

e.printStackTrace();

}

}

}).start();

}

// HttpURLConnection httpConnection = new Http

// HashMap<String, String> map = new HashMap<String, String>();

// map.put("pageNum", pageIndex + "");

// map.put("numPerPage", pageSize);

//

// String sign = DESMD5Utils.dsigndispost(map);

// AbRequestParams params = new AbRequestParams();

// params.put("pageNum", pageIndex + "");

// params.put("numPerPage", pageSize);

// params.put("sign", sign);

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_download);

initView();

btn_download.setOnClickListener(this);

httpClient = new OkHttpClient();

httpClient.setConnectTimeout(5000, TimeUnit.MILLISECONDS);

FormEncodingBuilder builder = new FormEncodingBuilder();

/**

* 添加请求的参数

*/

HashMap<String, String> map = new HashMap<String, String>();

map.put("data.type1", "2"); // 1 ios客户端 2 安卓客户端

map.put("data.versionNo", "130");

String sign = DESMD5Utils.dsigndispost(map);

builder.add("data.type1", "2");

builder.add("data.versionNo", "130");

builder.add("sign", sign);

Log.e("info", sign);

request = new Request.Builder().url(VERSIONUPDATE)

.post(builder.build()).build();

httpClient.newCall(request).enqueue(new Callback() {

@Override

public void onResponse(Response arg0) throws IOException {

if (arg0 != null) {

Message msg = Message.obtain();

msg.what = 1;

msg.obj = arg0.body().string();

;

mHandler.sendMessage(msg);

}

}

@Override

public void onFailure(Request arg0, IOException arg1) {

Log.e("info", "请求失败");

}

});

}

private void initView() {

btn_download = (Button) findViewById(R.id.btn_download);

down_progressBar = (ProgressBar) findViewById(R.id.down_progressBar);

}

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: