class InitThread extends Thread {
@Override
public void run() {
HttpURLConnection httpconn =null ;
try{
URL url = new URL(UPDATE_DOWNURL);
httpconn = (HttpURLConnection) url
.openConnection();
httpconn.setRequestMethod("GET");
httpconn.connect();
length=-1;
if (httpconn .getResponseCode() == HttpStatus.SC_OK) {
length = httpconn.getContentLength();
}
if (length <=0) {
return;
}
handler.sendEmptyMessage(0);
}catch(Exception ex){
ex.printStackTrace();
}finally{
try {
httpconn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
};
new InitThread().start();
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
new Thread() {
private long finishedCount = 0; // 已經下載下傳的
@Override
public void run() {
FileOutputStream fos = null;
InputStream is = null;
try {
isLoading = true;
File ApkFile = new File(savefolder, UPDATE_SAVENAME);
long size = AppUtil.getFileSize(ApkFile);
if(size >= length) {
if (ApkFile.exists()) {
ApkFile.delete();
size = 0;
Log.e("downloadsizes", "-----!!!---------------delete=");
}
// fos = new FileOutputStream(ApkFile, false);
} else {
// fos = new FileOutputStream(ApkFile, true);
}
Log.e("downloadsizes", "-----!!!---------------size=" + size);
fos = new FileOutputStream(ApkFile, true);
// String value = Reader.readFromSharedPreferences(ctx, "downloadsizes");
// Log.e("downloadsizes", "-----!!!---------------value=" + value);
//
// if (value != null && value.length() > 0) {
// lastFinished = Long.parseLong(value);
// Log.e("lastFinished", "-----!!!---------------lastFinished=" + lastFinished);
// } else {
// if (ApkFile.exists()) {
// ApkFile.delete();
// }
// Writer.writeToSharedPreferences(ctx, "downloadsizes", String.valueOf(0));
// }
URL url = new URL(UPDATE_DOWNURL);
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.setRequestProperty("Range", "bytes=" + size + "-");
conn.connect();
Log.e("length", "-----!!!---------------length=" + length);
is = conn.getInputStream();
int len = -1;
finishedCount = size;
byte buf[] = new byte[1024];
//is.skip(size);
while ((len = is.read(buf)) != -1 && !canceled){
finishedCount += len;
Log.e("len", "-----!!!---------------len=" + len);
Log.e("count", "-----!!!---------------count=" + finishedCount);
int percent = (int) ((float) finishedCount * 100 / length);
// if (percent != progress) {
progress = percent;
// Writer.writeToSharedPreferences(ctx, "downloadsizes", String.valueOf(count));
updateHandler.sendMessage(updateHandler
.obtainMessage(UPDATE_DOWNLOADING));
// }
fos.write(buf, 0, len);
}
fos.close();
is.close();
updateHandler.sendEmptyMessage(UPDATE_DOWNLOAD_COMPLETED);
if (canceled) {
isLoading = false;
// Writer.writeToSharedPreferences(ctx, "downloadsizes", String.valueOf(count));
updateHandler
.sendEmptyMessage(UPDATE_DOWNLOAD_CANCELED);
}
isLoading = false;
} catch (MalformedURLException e) {
e.printStackTrace();
// Writer.writeToSharedPreferences(ctx, "downloadsizes", String.valueOf(count));
updateHandler.sendMessage(updateHandler.obtainMessage(
UPDATE_DOWNLOAD_ERROR, e.getMessage()));
} catch (IOException e) {
e.printStackTrace();
// Writer.writeToSharedPreferences(ctx, "downloadsizes", String.valueOf(count));
updateHandler.sendMessage(updateHandler.obtainMessage(
UPDATE_DOWNLOAD_ERROR, e.getMessage()));
} finally {
isLoading = false;
try {
fos.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}.start();
}
};