全志代码首次提交
This commit is contained in:
@@ -0,0 +1,160 @@
|
||||
package com.android.download;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.android.util.FileUtil;
|
||||
import com.android.util.LogUtils;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.RandomAccessFile;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
|
||||
public class DownloadAppTask extends Thread{
|
||||
public static int threadCount = 3;
|
||||
public static int runningThread = 3;
|
||||
private String downurl;
|
||||
private Context mContext;
|
||||
/**存储路径*/
|
||||
private String FILEPATH_STORAGE;
|
||||
|
||||
/**临时文件名称*/
|
||||
public static String FILENAME_TMP="Nebula-app.bak";
|
||||
/**正是文件名称*/
|
||||
private static String FILENAME_APK="Nebula-app.apk";
|
||||
private DownLoadAppListener mDownLoadAppListener;
|
||||
private long startIndex = 0;
|
||||
private long totalSize = 0;
|
||||
|
||||
public DownloadAppTask(Context context,String versionCode,String url,long fileSize,DownLoadAppListener downLoadAppListener){
|
||||
mContext = context;
|
||||
this.downurl = url;
|
||||
this.totalSize = fileSize;
|
||||
this.mDownLoadAppListener = downLoadAppListener;
|
||||
this.FILEPATH_STORAGE = FileUtil.getBakPath(mContext,1) ;
|
||||
FILENAME_APK=versionCode+"-"+FILENAME_APK;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
super.run();
|
||||
|
||||
try {
|
||||
|
||||
|
||||
File tempfile =new File(FILEPATH_STORAGE,FILENAME_TMP);
|
||||
|
||||
if(tempfile.exists()){
|
||||
startIndex = tempfile.length();
|
||||
}else {
|
||||
tempfile.createNewFile();
|
||||
}
|
||||
|
||||
HttpURLConnection urlConnection;
|
||||
URL url = new URL(downurl);
|
||||
// URL url = new URL(" https://ik-cos-1258208609.cos.ap-guangzhou.myqcloud.com/Chrome.apk");
|
||||
|
||||
urlConnection = (HttpURLConnection) url.openConnection();
|
||||
urlConnection.setConnectTimeout(2000*10); //设置连接超时事件为5秒
|
||||
urlConnection.setRequestMethod("GET"); //设置请求方式为GET
|
||||
//设置用户端可以接收的媒体类型
|
||||
urlConnection.setRequestProperty("Accept", "image/gif, image/jpeg, image/pjpeg, " +
|
||||
"image/pjpeg, application/x-shockwave-flash, application/xaml+xml, " +
|
||||
"application/vnd.ms-xpsdocument, application/x-ms-xbap," +
|
||||
" application/x-ms-application, application/vnd.ms-excel," +
|
||||
" application/vnd.ms-powerpoint, application/msword, */*");
|
||||
|
||||
urlConnection.setRequestProperty("Accept-Language", "zh-CN"); //设置用户语言
|
||||
urlConnection.setRequestProperty("Charset", "UTF-8"); //设置客户端编码
|
||||
//设置用户代理
|
||||
urlConnection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; " +
|
||||
"Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727;" +
|
||||
" .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)");
|
||||
//设置下载位置
|
||||
urlConnection.setRequestProperty("Range", "bytes=" + startIndex + "-" + (totalSize-1));
|
||||
LogUtils.loge("totalSize:"+totalSize+"");
|
||||
LogUtils.loge("getResponseCode:"+urlConnection.getResponseCode()+"");
|
||||
InputStream in = urlConnection.getInputStream();
|
||||
RandomAccessFile raf = new RandomAccessFile(tempfile.getPath(), "rwd");
|
||||
raf.seek(startIndex);
|
||||
int len = 0;
|
||||
int progress=0;
|
||||
byte buf[] =new byte[1024];
|
||||
while((len = in.read(buf))!=-1){
|
||||
raf.write(buf, 0, len);
|
||||
progress+=len;
|
||||
LogUtils.loge("downlaod progress:"+progress);
|
||||
}
|
||||
in.close();
|
||||
raf.close();
|
||||
|
||||
|
||||
File apkFile = new File(FILEPATH_STORAGE,FILENAME_APK);
|
||||
LogUtils.loge("downlaod:"+tempfile.length());
|
||||
if(tempfile.length()==totalSize){
|
||||
tempfile.renameTo(apkFile);
|
||||
tempfile.delete();
|
||||
//下载完成
|
||||
if(mDownLoadAppListener!=null){
|
||||
mDownLoadAppListener.onDowanlaodResult(0,apkFile.getPath());
|
||||
}
|
||||
|
||||
|
||||
}else {
|
||||
if(mDownLoadAppListener!=null){
|
||||
mDownLoadAppListener.onDowanlaodResult(-1,null);
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
if(mDownLoadAppListener!=null){
|
||||
mDownLoadAppListener.onDowanlaodResult(-1,null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// public boolean executeAppInstall(String apkPath){
|
||||
// boolean result = false;
|
||||
// try {
|
||||
// Runtime.getRuntime().exec("su");
|
||||
// String command = "pm install -r " + apkPath + "\n";
|
||||
// Process process = Runtime.getRuntime().exec(command);
|
||||
// BufferedReader errorStream = new BufferedReader(new InputStreamReader(process.getErrorStream()));
|
||||
// String msg = "";
|
||||
// String line;
|
||||
// while ((line = errorStream.readLine()) != null) {
|
||||
// msg += line;
|
||||
// }
|
||||
// if (!msg.contains("Failure")) {
|
||||
// result = true;
|
||||
// }
|
||||
//
|
||||
// } catch (IOException e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// return result;
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public interface DownLoadAppListener{
|
||||
public void onDowanlaodResult(int status,String filePath);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user