綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[資料] Android 下載時,使用斷點續傳核心代碼

[複製連結] 查看: 2199|回覆: 1|好評: 0
跳轉到指定樓層
樓主
暗桌之光 | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2011-7-3 16:46

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
  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. }
複製代碼
「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)

評分

參與人數 2碎鑽 +1 幫助 +2 收起 理由
dicsy + 1 + 1 非常讚
idvtw + 1

查看全部評分

收藏收藏 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
沙發
kaye19781206 | 收聽TA | 只看該作者
發表於 2014-2-4 13:03
這要如何用阿????
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則