package com.accp.pageload.view;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import com.accp.pageload.net.JudgeNet;
import com.accp.pageload.utils.Const;
import com.accp.pageload.utils.FileUtility;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;
public class DownLoadingActivity extends Activity {
private Button mStart;
private Button mPause;
private ProgressBar mPro;
private Button start2;
private int mFileSize;
private int mHasdownload;
private HandlerThread handlerthread;
private MyHandler my;
private boolean mIspause = false;
private RandomAccessFile mAccessFile;
private int mFirstFileSize;
private int mIndex = 1;
private int mResult;
private int i = 1;
private Handler mHandler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.download);
handlerthread = new HandlerThread("hand_thread");
handlerthread.start();
my = new MyHandler(handlerthread.getLooper());
init();
judgeNet();
}
public void init() {
mStart = (Button) findViewById(R.id.start);
mPause = (Button) findViewById(R.id.pause);
mPro = (ProgressBar) findViewById(R.id.pro);
start2 = (Button) findViewById(R.id.start2);
mPro.setMax(100);
// result = getShareProgress("progress");
// first = getShareFileSize("fileSize");
// pro.setProgress(result);
// hasdownload = result / 100 * first;
mStart.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
try {
Message mes = new Message();
mes.obj = "http://192.168.1.20/download/%e6%b5%aa%e6%bd%ae.pdf";
mes.what = i;
my.sendMessage(mes);
System.out.println("亲,您进入了message");
} catch (Exception e) {
e.printStackTrace();
}
}
});
start2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Message mes = new Message();
mes.obj = "http://192.168.1.20/download/%e6%b5%aa%e6%bd%ae.pdf";
my.sendMessage(mes);
}
});
mPause.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mIspause = true;
mStart.setClickable(true);
}
});
}
class MyHandler extends Handler {
public MyHandler() {
}
public MyHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
mIspause = false;
int length;
URL url;
System.out.println(msg.obj.toString());
try {
if (msg.what > 0) {
url = new URL(msg.obj.toString());
HttpURLConnection http = (HttpURLConnection) url
.openConnection();
http.setConnectTimeout(100000);
http.setRequestMethod("GET");
http.setRequestProperty("Range", "bytes=" + mHasdownload
+ "-");
if (http.getResponseCode() == 206) {
mFileSize = http.getContentLength();
if (mIndex == 1) {
mFirstFileSize = mFileSize;
mIndex++;
}
FileUtility fileUtil = new FileUtility();
File parent = fileUtil
.createAlbumRootSDDir(Const.FOLDERNAME);
File file = fileUtil.createAlbumDir("baidu.pdf");
BufferedInputStream buffer = new BufferedInputStream(
http.getInputStream());
byte[] bufferByte = new byte[100000];
mAccessFile = new RandomAccessFile(file, "rwd");
mAccessFile.setLength(mFileSize);
mAccessFile.seek(mHasdownload);
while ((length = (buffer.read(bufferByte))) != -1) {
if (mIspause == true) {
break;
}
mHasdownload += length;
mResult = (int) ((float) mHasdownload
/ (float) mFirstFileSize * 100);
mAccessFile.write(bufferByte, 0, length);
Message ms = new Message();
ms.arg1 = mResult;
ms.arg2 = 1;
hand.sendMessage(ms);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
mAccessFile.close();
}
http.disconnect();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class MyThread extends Thread {
private String downLoadUrl;
private int fileId;
private int hasDownLoad;
public MyThread(String url, int fileId, int hasDownLoad) {
this.downLoadUrl = url;
this.fileId = fileId;
this.hasDownLoad = hasDownLoad;
}
@Override
public void run() {
super.run();
Looper.prepare();
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
// mStart.setClickable(false);
mIspause = false;
int length;
URL url;
try {
url = new URL(downLoadUrl);
HttpURLConnection http = (HttpURLConnection) url
.openConnection();
http.setConnectTimeout(100000);
http.setRequestMethod("GET");
http.setRequestProperty("Range", "bytes="
+ mHasdownload + "-");
if (http.getResponseCode() == 206) {
mFileSize = http.getContentLength();
if (mIndex == 1) {
mFirstFileSize = mFileSize;
// pro.setMax(first);
mIndex++;
}
FileUtility fileUtil = new FileUtility();
File parent = fileUtil
.createAlbumRootSDDir(Const.FOLDERNAME);
File file = fileUtil.createAlbumDir("baidu.pdf");
BufferedInputStream buffer = new BufferedInputStream(
http.getInputStream());
byte[] bufferByte = new byte[100000];
mAccessFile = new RandomAccessFile(file, "rwd");
mAccessFile.setLength(mFileSize);
mAccessFile.seek(mHasdownload);
while ((length = (buffer.read(bufferByte))) != -1) {
if (mIspause == true) {
break;
}
mAccessFile.write(bufferByte, 0, length);
mHasdownload += length;
mResult = (int) ((float) mHasdownload
/ (float) mFirstFileSize * 100);
Message m = new Message();
m.arg1 = mResult;
m.arg2 = 1;
hand.sendMessage(m);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
mAccessFile.close();
}
http.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
};
Looper.loop();
}
}
Handler hand = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.arg2) {
case 1:
mPro.setProgress(msg.arg1);
if (mPro.getProgress() == 100) {
Toast.makeText(DownLoadingActivity.this, "下载已完成!", 3000)
.show();
// saveProgressInShare("progress", hasdownload);
}
break;
case 2:
Thread runnable = (Thread) msg.obj;
runnable.start();
break;
}
}
};
@Override
public void onBackPressed() {
super.onBackPressed();
mIspause = true;
// if (!MyThread.currentThread().isInterrupted()) {
// MyThread.currentThread().interrupt();
// }
System.out.println("已经下载" + mResult);
saveProgressInShare("progress", mResult, "fileSize", mFirstFileSize);
}
public void saveProgressInShare(String shareName, int hasdownload,
String File, int fileSize) {
SharedPreferences share = getSharedPreferences("share",
Context.MODE_PRIVATE);
share.edit().putInt(shareName, hasdownload).commit();
share.edit().putInt(File, fileSize).commit();
}
public int getShareProgress(String shareName) {
SharedPreferences shar = getSharedPreferences("share",
Context.MODE_PRIVATE);
return shar.getInt(shareName, 0);
}
public int getShareFileSize(String fileName) {
SharedPreferences shar = getSharedPreferences("share",
Context.MODE_PRIVATE);
return shar.getInt(fileName, 0);
}
public void judgeNet() {
NetworkInfo netInfo = JudgeNet.getActiveNetwork(this);
if (netInfo == null) {
mIspause = true;
// if (!MyThread.currentThread().isInterrupted()) {
// MyThread.currentThread().interrupt();
// }
saveProgressInShare("progress", mHasdownload, "fileSize",
mFirstFileSize);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("提示")
.setMessage("网络连接失败!")
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
Intent intent = new Intent(
"android.settings.WIRELESS_SETTINGS");
startActivity(intent);
}
}).create().show();
} else if (netInfo.getState().equals(
NetworkInfo.DetailedState.CONNECTED)) {
mStart.setClickable(true);
mPause.setClickable(true);
} else if (netInfo.getState().equals(
NetworkInfo.DetailedState.CONNECTING)) {
System.out.println("正在连接中");
}
}
}