Android 台灣中文網

標題: Android 下載時,使用斷點續傳核心代碼 [打印本頁]

作者: 暗桌之光    時間: 2011-7-3 16:46
標題: Android 下載時,使用斷點續傳核心代碼
  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. }
複製代碼

作者: kaye19781206    時間: 2014-2-4 13:03
這要如何用阿????





歡迎光臨 Android 台灣中文網 (https://apk.tw/) Powered by Discuz! X3.1