Android断点续传核心代码

本文详细介绍了如何实现断点续传功能及远程文件下载过程,包括创建临时文件、请求头设置、文件读取与写入操作,以及获取文件大小与计算下载进度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. /** 
  2. * 断点续传 
  3. * @param url 
  4. */  
  5. private void duanDianXuChuan(final String url){  
  6. try {  
  7. Runnable r = new Runnable() {  
  8. @Override  
  9. public void run() {  
  10. getRemoteFile(url);  
  11. }  
  12. };  
  13. new Thread(r).start();  
  14. catch (Exception e) {  
  15. e.printStackTrace();  
  16. }  
  17. }  
  18. /** 
  19. * 下载远端文件 
  20. * @param urlString 
  21. */  
  22. private void getRemoteFile(String urlString){  
  23. try{  
  24. File file;  
  25. if(mCurSize == 0){  
  26. file = File.createTempFile(fileNa, fileEx);  
  27. currentTempFilePath = file.getAbsolutePath();  
  28. Log.e(“andy”,file.getName() + ” has exists.”);  
  29. else {  
  30. file = new File(currentTempFilePath);  
  31. FileInputStream fis = new FileInputStream(file);  
  32. mCurSize = fis.available();  
  33. Log.e(“andy”,file.getName() + ” has ” + mCurSize + ” bytes.”);  
  34. }  
  35. URL url = new URL(urlString);  
  36. HttpURLConnection httpConnection = (HttpURLConnection) url  
  37. .openConnection();  
  38. httpConnection.setRequestProperty(“User-Agent”, “NetFox”);  
  39. String sProperty = “bytes=” + mCurSize + “-”;  
  40. httpConnection.setRequestProperty(“RANGE”, sProperty);  
  41. InputStream is = httpConnection.getInputStream();  
  42. Log.e(“andy”,”mTempFileName = ” + mTempFileName);  
  43. /*将文件写入暂存盘*/  
  44. FileOutputStream fos = new FileOutputStream(file, true);  
  45. byte buf[] = new byte[512];  
  46. do  
  47. {  
  48. int numread = is.read(buf);  
  49. if (numread <= 0)  
  50. {  
  51. mHandler.sendEmptyMessageDelayed(this.DOWNLOAD_FINISH, 0);  
  52. break;  
  53. }  
  54. mCurSize += numread;  
  55. mHandler.sendEmptyMessageDelayed(this.UPDATE_DOWNLOAD_PROGRESS, 0);  
  56. Log.e(“andy”,”current size = ” + mCurSize);  
  57. fos.write(buf, 0, numread);  
  58. }while (mContinue);  
  59. /*打开文件进行安装*/  
  60. if(mCurSize == mSize) {  
  61. mCurSize = 0;  
  62. openFile(file);  
  63. }  
  64. try  
  65. {  
  66. is.close();  
  67. }  
  68. catch (Exception ex)  
  69. {  
  70. Log.e(“andy”, “error: ” + ex.getMessage(), ex);  
  71. }  
  72. }catch(Exception e){  
  73. e.printStackTrace();  
  74. }  
  75. }  
  76. /** 
  77. * 获得文件长度 
  78. * @param urlString 
  79. * @return 
  80. */  
  81. public long getFileSize(String urlString) {  
  82. int nFileLength = -1;  
  83. try {  
  84. URL url = new URL(urlString);  
  85. HttpURLConnection httpConnection = (HttpURLConnection) url  
  86. .openConnection();  
  87. httpConnection.setRequestProperty(“User-Agent”, “NetFox”);  
  88. int responseCode = httpConnection.getResponseCode();  
  89. if (responseCode >= 400) {  
  90. return -2// -2 represent access is error  
  91. }  
  92. String sHeader;  
  93. for (int i = 1;; i++) {  
  94. sHeader = httpConnection.getHeaderFieldKey(i);  
  95. if (sHeader != null) {  
  96. if (sHeader.equals(“content-length”)) {  
  97. nFileLength = Integer.parseInt(httpConnection  
  98. .getHeaderField(sHeader));  
  99. break;  
  100. }  
  101. else  
  102. break;  
  103. }  
  104. catch (IOException e) {  
  105. e.printStackTrace();  
  106. catch (Exception e) {  
  107. e.printStackTrace();  
  108. }  
  109. return nFileLength;  
  110. }  
  111. /** 
  112. * 计算百分比 
  113. * @param p1 
  114. * @param p2 
  115. * @return 
  116. */  
  117. public static String percent(double p1, double p2) {  
  118. String str;  
  119. double p3 = p1 / p2;  
  120. NumberFormat nf = NumberFormat.getPercentInstance();  
  121. nf.setMinimumFractionDigits(2);  
  122. str = nf.format(p3);  
  123. Log.e(“andy”,”percentage = ” + str);  
  124. return str;  
  125. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值