Android中http断点下载,Android HttpURLConnection断点下载(单线程)

HttpCilent 跟 HttpURLConnection 是安卓原生的用来实现http请求的类:

Android 6.0之后取消了HttpClient,不支持跟新 ,今天小编使用的是HttpURLConnection :

直接上代码:

URL url = null;

BufferedInputStream bin = null;

HttpURLConnection httpURLConnection = null;

Context context;

try {

//你要下载文件的路径

String urlPath = "MyUrlPath"

long fileSize = file.length;

//获取开始下载位置

long startOffset = getFileLength(context);

url = new URL(urlPath);

//获取HttpURLConnection对象

httpURLConnection = (HttpURLConnection) url.openConnection();

//设置请求方式

httpURLConnection.setRequestMethod("GET");

//设置字符编码,这个字符编码表示为头500个字节:Range: bytes=0-499

表示第二个500字节:Range: bytes=500-999

表示最后500个字节:Range: bytes=-500

表示500字节以后的范围:Range: bytes=500-

第一个和最后一个字节:Range: bytes=0-0,-1

同时指定几个范围:Range: bytes=500-600,601-999

httpURLConnection.setRequestProperty("Range","bytes=" + startOffset + "-");

// 打开到此 URL 引用的资源的通信链接(如果尚未建立这样的连接)。

httpURLConnection.connect();

if(httpURLConnection.getResponseCode() == 206){

//if startOffset ==0 的时候,你就要把你的文件大小保存起来

//获取文件的大小httpURLConnection.getContentLength();

//当你第一次下载的时候,也就是你的起始位置是0的时候,这就是这个文件的总大小,如果bytes=xx 的范围大于0,那么你获取的值就是你的文件总大小-bytes

//获取文件输出流

bin = new BufferedInputStream(httpURLConnection.getInputStream());

//这个是你要保存在那个目录的位置

File folder= new File(DOWNLOADDIR);

//如果文件夹不存在则新建一个文件夹

if(!folder.exists()){

folder.mkdirs();

}

// 随机访问文件,可以指定断点续传的起始位置

//flieAbsolutePath 是你具体的文件路径

RandomAccessFile randomAccessFile = new RandomAccessFile(flieAbsolutePath,"rwd");

// rwd 跟 r 跟 w的区别是rwd:边读编写边下载 r读 w写

randomAccessFile.seek(startOffset);

byte[] buffer = new byte[2048];

int len;

//isStop可以用来实现暂停功能

while ((len = bin.read(buffer)) != -1 && !isStop) {

randomAccessFile.write(buffer,len);

startOffset += len;

//刷新下载进度

Message msg = new Message();

msg.what = (int)((startOffset * 100) / fileSize);

//使用handler发送消息刷新UI

handler.sendMessage(msg);

//保存下载的位置到SharedPreferences,下次下载的时候拿值写入设置字符编码

saveFileLength(context,startOffset);

}

}

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}finally {

if(url != null){

url = null;

}

if(bin != null){

try {

bin.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if(httpURLConnection != null){

httpURLConnection.disconnect();

}

}

return null;

}

/**

* 保存文件长度

* @param context

* @param fileLength

*/

private static void saveFileLength(Context context,Long fileLength ){

SharedPreferences sp = context.getSharedPreferences("My_SP",Context.MODE_PRIVATE);

SharedPreferences.Editor editor = sp.edit();

editor.putLong("File_startOffset",fileLength);

editor.commit();

}

/**

* 获取文件长度

* @param context

* @return

*/

private static Long getFileLength(Context context){

SharedPreferences sp = context.getSharedPreferences("My_SP",Context.MODE_PRIVATE);

return sp.getLong("File_startOffset",0);

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/442362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android ui 单元测试 覆盖率,Android单元测试—UI测试(Espresso)

前言我们先回顾一下,在上一篇博客中,主要分享了Android单元测试的逻辑测试部分。接下来,我们重点讲解Android单元测试的UI测试部分!何为UI测试呢?就是对用户界面的交互元素进行测试,如TextView、ImageView&…

android shape 圆角百分比,Android shape显示圆角问题

当需要定义一个圆角效果,当在ADT中预览,没有有效果时,只要运行就可以了!xmlns:Android"http://schemas.android.com/apk/res/android">android:state_pressed"true">android:startColor"#ff8c00"android:endColor"#FFFFFF…

Android png模拟svg,Android 中使用svg图片

1. svg认识SVG:android5.0出现,w3c推出使用xml 描述二维图形语言,矢量图,放大缩小无影响为什么用svg,现在手机的短板是内存,不是cpu,svg通过cpu计算,png占用内存Android上对svg进行阉割,使用Vector Drawable对svg支持,…

android 删除垃圾文件夹,别再用手机管家清理垃圾了!删除这些文件夹,内存瞬间释放几个G...

随着手机使用时间的增加,手机中缓存的东西越来越多,这时候手机内存空间就会告急,从而影响手机的流畅性。那么在这种时候不要乱清理,我们只需要删除这几个文件夹,就可以帮手机轻松释放好几个G的内存。下面我们就一起来看…

android软件perthbus,Transit

v5.9.10版更新说明(2021-03-19)Whether you’re riding transit for business, pleasure, or to get shredded from a socially-spaced-out bus ballet, you’ll notice “Favourite destination” icons have been newly primped to prom perfection.What else? Hello Free2M…

HTML中scr是图片的什么,HTML中关于url、scr、href的区别

HTML中关于url、scr、href的区别URL是什么URL:Uniform Resource Locators(统一资源定位器)的简写,Web浏览器通过URL从Web服务器请求页面。url不是属性,src和href是属性,src用于替换当前元素,href用于在当前文档和引用资…

html5页面结构案例,前端学习笔记(五)HTML+CSS静态页面实战案例:幸福西饼首页和百度首页...

按照知乎上面汪小黑推荐的前端学习路径,在自学了HTML和CSS之后,开始尝试实战制作静态页面小项目。幸福西饼首页制作首先我在网上下载到了千锋教育提供的的幸福西饼官网静态页面的教学视频和图片素材、源码等。我是先看一集视频,然后关掉视频自…

计算机的应用技术课程的看法,统计教学与计算机应用的几点看法论文

统计教学与计算机应用的几点看法论文一、传统教学方法的局限性和弊端统计学是一门关于搜集、整理、汇总、描述和分析数据资料,并在此基础上进行推断和决策的方法论科学,具有很强的应用性、实践性。统计学课程是中等职业学校、财经类专业的基础核心课程。…

计算机应用基础试卷结果分析,计算机应用基础 试题

计算机应用基础 试题计算机应用基础的试题有哪些?打击知道吗?下面小编为大家带来计算机应用基础试题,仅供参考,希望能够帮到大家。计算机应用基础试题选择题:1、现代信息社会的主要标志是 ___ 。(A) 汽车的大量使用 (B) 人口的日益增长 (C) 自然环境的…

中国石油大学计算机专业调剂信息,2014年中国石油大学(北京)计算机专业考研调剂信息(新)...

写在前面:随着2014年34所自主划线院校考研分数线及国家线的公布,2014年考研复试、调剂工作也陆续拉开序幕。为了帮助更多考生顺利通过复试,考研论坛特开启复试调剂答疑活动,解答2014年考生有关考研复试和调剂的问题,为…

jupyter可以打开HTML文件吗,Jupyter ~ 像写文章般的 Coding (附:同一个ipynb文件,执行多语言代码)...

前面用了很久Notebook来交互式编程了,此次说说几个其余的选项:htmlNotebook Markdown此次选Markdown模式(关于Markdown基础能够看以前写的Markdown Base)python和代码同样,Shift回车就能够预览了,怎么样是否是很酷的感受&#xff…

计算机专业毕业论文指导记录详细,毕业论文指导记录怎么写 了解一下

1、指导记录总共6次,请各位同学按照法学院网站上公布的毕业论文写作进度确定每次指导记录的时间。同时根据自己的论文选题和实际情况,可稍作调整。2、第一次:根据学院的统一部署,布置学生毕业论文写作的总体要求与进度&#xff0c…

计算机专业会议评级,2018计算机专业工程教育认证研讨会

为帮助计算机专业了解我国工程教育认证进展、理解认证标准的本质、引导专业建立正确的认证观,落实以认证推进专业建设和完善内部质量保障体系、以认证工作推进一流专业建设,把认证和专业改革发展有机结合,提高计算机教学教育的质量。中国计算…

如何用计算机基础知识提问,职业学校《计算机应用基础》课的提问策略

【摘 要】《计算机应用基础》是中等职业学校的公共基础课,是一门融理论、技能、实训于一体的课程。本文简要分析《计算机应用基础》课的教学现状,通过对课堂教学现状的表现及原因的分析,从五个方便阐述职业学校《计算机应用基础》课的提问策略…

计算机网络技术基础教学内容,计算机网络技术基础

无计算机网络技术基础》课程教案一 计算机网络技术基础》课题: 课题:计算机网络概述(一) ) 教学顺序: 教学顺序:1 教学时数: 教学时数: 2 学时 教学目的:了解计算机网络产生的背景,掌…

淮阴工学院计算机答辩,淮阴工学院关于做好2014级研究生学位论文答辩工作的通知...

根据《淮阴工学院全日制工程硕士专业学位授予工作细则》(淮工院〔2013〕49号)(附件1)文件精神,淮阴工学院现将2014级研究生学位论文答辩相关工作事宜通知如下。下面,小编为大家分享淮阴工学院关于做好2014级研究生学位论文答辩工作的通知,全文…

计算机表格收入水平怎么算,怎么用excel计算工资所得税

利用Excel表格计算工资所得税?单位工资发放大多采用计算机管理,对一些小企业没有采用工资软件的,一般用Excel表来计算工资。下面小编就教你怎么用excel计算工资所得税。excel计算工资所得税的步骤:1、假设工资的所得税起征点为3500,具体阶段如下表。2、…

黔南民族师范学院计算机与信息学院,黔南民族师范学院

计算机与信息学院黔南民族师范学院计算机与信息学院成立于2000年9月,由原黔南师专计算机科学系、黔南教育学院微机培训中心、都匀民族师范学校计算机教研室组建而成。现下设系党政办公室、团委(学生工作办公室)、教务办公室、科研(学科建设)与研究生办公室、计算机实…

无法开启计算机,Win7下鼠标右键无法开启计算机属性怎么办?

Win7系统下,用户要查看计算机的属性,一般都会通过鼠标右键点击计算机图标,就会出现计算机属性的选项,这样就能快速地进入属性查看。但最近有用户遇到奇怪的现象,Win7下,用鼠标右键去开启计算机属性的时候运…

同一网段计算机无法共享打印机,Win7同一个局域网内共享打印机不成功的修复方法...

打印机共享需要在同一个局域网内完成,这样打印机可以共享多台电脑。一位用户说自己的打印机和台式Win7系统电脑的连接已经成功,但就是没办法打印机文件,怎么回事呢?win7系统共享打印机的前提是需要关闭杀毒软件和win7系统的防火墙…