Android应用开发之断点续传(下载)
白羽 2018-12-19 来源 :网络 阅读 564 评论 0

摘要:本文将带你了解Android应用开发Android开发之断点续传(下载),希望本文对大家学Android有所帮助。

    本文将带你了解Android应用开发Android开发之断点续传(下载),希望本文对大家学Android有所帮助。



        

DownloadUtils


   

public class DownloadUtils {

 private static final String TAG = "DownloadUtils";

 private static volatile DownloadUtils instance;

 private File file;

 private String filePath;

 

 private OkHttpClient client;

 private File downloadFile;

 private long startPosition;

 private Call call;

 

 private DownloadUtils() {

  client = new OkHttpClient();

 }

 

 private DownloadListener listener;

 

 public void setListener(DownloadListener listener) {

  this.listener = listener;

 }

 

 /**

  * 初始化下载父路径

  *

  * @param path

  */

 public void initDownload(String path) {

  file = new File(path);

  if (!file.getParentFile().exists()) {

file.getParentFile().mkdir();

  }

  if (!file.exists()) {

file.mkdir();

  }

  filePath = file.getAbsolutePath();

  Log.i(TAG, "initDownload: " + filePath);

 }

 

 public static DownloadUtils getInstance() {

  if (null == instance) {

synchronized (DownloadUtils.class) {

 if (instance == null) {

  instance = new DownloadUtils();

 }

}

  }

  return instance;

 }

 

 public void startDownload(String url) {

  if (TextUtils.isEmpty(url)) {

return;

  }

 

 

  if (url.contains(".")) {

String typeName = url.substring(url.lastIndexOf(".") + 1);

if (url.contains("/")) {

 String name = url.substring(url.lastIndexOf("/") + 1, url.lastIndexOf("."));

 String fn = name + "." + typeName;

 

 downloadFile = new File(file, fn);

}

  }

  startPosition = 0;

  if (downloadFile.exists()) {

startPosition = downloadFile.length();

  }

 

  Request request = new Request.Builder()

 .addHeader("RANGE", "bytes=" + startPosition + "-")

 .url(url)

 .build();

 

  call = client.newCall(request);

  call.enqueue(new Callback() {

@Override

public void onFailure(Call call, IOException e) {

 

}

 

@Override

public void onResponse(Call call, Response response) throws IOException {

 listener.startDownload();

 ResponseBody body = response.body();

 long totalLength = body.contentLength() + startPosition;

 Log.i(TAG, "totalLength: " + totalLength + "----");

 InputStream is = body.byteStream();

 byte[] buf = new byte[2048];

 int length = 0;

 long totalNum = startPosition;

 RandomAccessFile raf = new RandomAccessFile(downloadFile, "rw");

 raf.seek(totalNum);

 while ((length = is.read(buf, 0, buf.length)) != -1) {

  raf.write(buf, 0, length);

  totalNum += length;

  listener.downloadProgress(totalNum * 100 / totalLength);

 

 }

 Log.i(TAG, "totalNum==" + totalNum + "---");

 listener.finishDownload(downloadFile.getAbsolutePath());

 body.close();

}

  });

 

 

 }

 

 public void pauseDownload() {

  listener.pauseDownload();

  if (call != null && call.isExecuted()) {

call.cancel();

  }

 }

}

   

DownloadListener


   

public interface DownloadListener {

 void startDownload();

 

 void pauseDownload();

 

 void finishDownload(String path);

 

 void downloadProgress(long progress);

}

   

MainActivity


   

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

 

 private TextView tv_pro;

 private ProgressBar progressBar;

 private Button btn_start;

 private Button btn_pause;

 private String downloadUrl = "https://acj3.pc6.com/pc6_soure/2017-12/com.yek.android.kfc.activitys_3820.apk";

 

 @Override

 protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.activity_main);

  tv    

   

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程