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 map = new HashMap();
// 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 map = new HashMap();


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


}
}

更多相关文章

  1. Android学习之使用HttpURLConnection下载文件
  2. android 文件的压缩和解压
  3. 83 Android(安卓)Handler ProgressBar 进度条
  4. Android文件操作放到listview中
  5. Android(安卓)APK下载安装(自动更新)
  6. ExpandableListView 使用方法
  7. gtest的使用 (android)
  8. android 视频录制 例子源码
  9. 简单创建Android(安卓)MVVM模式代码

随机推荐

  1. 《Java和Android开发实战详解》
  2. 深入讲解Android中Activity launchMode
  3. Android我还可以相信你多少系列文章五之
  4. php与android的简单交互
  5. Android技术博文汇总
  6. Drawable Resources Part I(Drawable 资源
  7. Android的Handler,Looper源码剖析
  8. React Native与Android原生之间的通讯
  9. 使用Eclipse搭建简易Android服务器
  10. Android菜鸟的成长笔记(2)——第一个Androi