Android 台灣中文網
標題:
Android 下載時,使用斷點續傳核心代碼
[打印本頁]
作者:
暗桌之光
時間:
2011-7-3 16:46
標題:
Android 下載時,使用斷點續傳核心代碼
/**
* 斷點續傳
* @param url
*/
private void duanDianXuChuan(final String url){
try {
Runnable r = new Runnable() {
@Override
public void run() {
getRemoteFile(url);
}
};
new Thread(r).start();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 下載遠端文件
* @param urlString
*/
private void getRemoteFile(String urlString){
try{
File file;
if(mCurSize == 0){
file = File.createTempFile(fileNa, fileEx);
currentTempFilePath = file.getAbsolutePath();
Log.e(「andy」,file.getName() + 」 has exists.」);
} else {
file = new File(currentTempFilePath);
FileInputStream fis = new FileInputStream(file);
mCurSize = fis.available();
Log.e(「andy」,file.getName() + 」 has 」 + mCurSize + 」 bytes.」);
}
URL url = new URL(urlString);
HttpURLConnection httpConnection = (HttpURLConnection) url
.openConnection();
httpConnection.setRequestProperty(「User-Agent」, 「NetFox」);
String sProperty = 「bytes=」 + mCurSize + 「-」;
httpConnection.setRequestProperty(「RANGE」, sProperty);
InputStream is = httpConnection.getInputStream();
Log.e(「andy」,」mTempFileName = 」 + mTempFileName);
/*將文件寫入暫存盤*/
FileOutputStream fos = new FileOutputStream(file, true);
byte buf[] = new byte[512];
do
{
int numread = is.read(buf);
if (numread <= 0)
{
mHandler.sendEmptyMessageDelayed(this.DOWNLOAD_FINISH, 0);
break;
}
mCurSize += numread;
mHandler.sendEmptyMessageDelayed(this.UPDATE_DOWNLOAD_PROGRESS, 0);
Log.e(「andy」,」current size = 」 + mCurSize);
fos.write(buf, 0, numread);
}while (mContinue);
/*打開文件進行安裝*/
if(mCurSize == mSize) {
mCurSize = 0;
openFile(file);
}
try
{
is.close();
}
catch (Exception ex)
{
Log.e(「andy」, 「error: 」 + ex.getMessage(), ex);
}
}catch(Exception e){
e.printStackTrace();
}
}
/**
* 獲得文件長度
* @param urlString
* @return
*/
public long getFileSize(String urlString) {
int nFileLength = -1;
try {
URL url = new URL(urlString);
HttpURLConnection httpConnection = (HttpURLConnection) url
.openConnection();
httpConnection.setRequestProperty(「User-Agent」, 「NetFox」);
int responseCode = httpConnection.getResponseCode();
if (responseCode >= 400) {
return -2; // -2 represent access is error
}
String sHeader;
for (int i = 1;; i++) {
sHeader = httpConnection.getHeaderFieldKey(i);
if (sHeader != null) {
if (sHeader.equals(「content-length」)) {
nFileLength = Integer.parseInt(httpConnection
.getHeaderField(sHeader));
break;
}
} else
break;
}
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return nFileLength;
}
/**
* 計算百分比
* @param p1
* @param p2
* @return
*/
public static String percent(double p1, double p2) {
String str;
double p3 = p1 / p2;
NumberFormat nf = NumberFormat.getPercentInstance();
nf.setMinimumFractionDigits(2);
str = nf.format(p3);
Log.e(「andy」,」percentage = 」 + str);
return str;
}
複製代碼
作者:
kaye19781206
時間:
2014-2-4 13:03
這要如何用阿????
歡迎光臨 Android 台灣中文網 (https://apk.tw/)
Powered by Discuz! X3.1