您的位置:首页 > 移动开发 > Android开发

android 断点下载

2016-06-02 22:15 323 查看
主要就是每步下载都将当期下载进度保存下来,下次进入下载的时候跳过之前的进度继续下载

完整代码如下

package com.test_duandian_download;

import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.RandomAccessFile;
import java.net.URL;

public class MainActivity extends AppCompatActivity {
TextView tv;
long skip = 0;
boolean isPause = false;
Thread download;
String u = "http://tupian.enterdesk.com/uploadfile/2015/0813/20150813043454679.jpg";

private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
tv.setText(msg.what +"");
}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.jindu);
}

public void pause(View v){
isPause = true;
}

public void resume(View v){
isPause = false;
if(download == null){
download = new Thread(down);
}
if(download.isAlive()){
return;
}
download = new Thread(down);
download.start();
}

Runnable down = new Runnable() {
@Override
public void run() {
InputStream in = null;
RandomAccessFile randomAccessFile = null;
try{
URL url = new URL(u);
in = url.openStream();
long all = url.openConnection().getContentLength();
File dir = new File(Environment.getExternalStorageDirectory() +"/mytest/");
if(!dir.exists()){
dir.mkdirs();
}
File file = new File(dir,"1.jpg");
if(!file.exists()){
file.createNewFile();
}
byte[] b = new byte[1024 * 8];
int i;
Log.w("test_bug","skip = "+skip(skip,in) +" myskip = "+skip);
randomAccessFile = new RandomAccessFile(file,"rws");
randomAccessFile.seek(skip);
while( (i = in.read(b)) != -1 && !isPause){
randomAccessFile.write(b,0,i);
skip += i;
int progress = (int) ((skip * 100)/all);
Message message = Message.obtain();
message.what = progress;
handler.sendMessage(message);
}
}catch (Exception e){
e.printStackTrace();
}finally {
try{
if(in != null){
in.close();
}
if(randomAccessFile != null){
randomAccessFile.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
}

public int skip(long skip,InputStream inputStream){
if(skip <= 0){
return 0;
}
int all = 0;
try{
while(all != skip){
all += inputStream.skip(skip - all);
}

}catch (Exception e){
e.printStackTrace();
}
return all;
}

};
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android java 断点下载