展会信息港展会大全

Android如何实现【断点续传】(核心代码)
来源:互联网   发布日期:2015-09-28 16:20:20   浏览:2457次  

导读:/** * 断 点 续 传 * * @param url */private void duanDianXuChuan(final String url) { try { Runnable r = new Runnable() { @Overridepublic void run() { getRemoteFile(url);......

/**

* 断 点 续 传

*

* @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;

}

赞助本站

人工智能实验室

相关热词: Android 断点续传

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港