1. 程式人生 > >Android檔案下載進度條的實現

Android檔案下載進度條的實現

  1. package com.pocketdigi.download;    
  2. import java.io.FileOutputStream;    
  3. import java.io.IOException;    
  4. import java.io.InputStream;    
  5. import java.net.URL;    
  6. import java.net.URLConnection;    
  7. import org.apache.http.client.ClientProtocolException;    
  8. import android.app.Activity;    
  9. import android.os.Bundle;    
  10. import android.os.Handler;    
  11. import android.os.Message;    
  12. import android.util.Log;    
  13. import android.widget.ProgressBar;    
  14. import android.widget.TextView;    
  15. import android.widget.Toast;    
  16. public class main extends Activity {    
  17.     /** Called when the activity is first created. */    
  18.     ProgressBar pb;    
  19.     TextView tv;    
  20.     int   fileSize;    
  21.     int   downLoadFileSize;    
  22.     String fileEx,fileNa,filename;    
  23.     private Handler handler = new Handler()    
  24.       {    
  25.         @Override    
  26.         public void handleMessage(Message msg)    
  27.         {//定義一個Handler,用於處理下載執行緒與UI間通訊    
  28.           if (!Thread.currentThread().isInterrupted())    
  29.           {    
  30.             switch (msg.what)    
  31.             {    
  32.               case 0:    
  33.                 pb.setMax(fileSize);    
  34.               case 1:    
  35.                 pb.setProgress(downLoadFileSize);    
  36.                 int result = downLoadFileSize * 100 / fileSize;    
  37.                 tv.setText(result + "%");    
  38.                 break;    
  39.               case 2:    
  40.                 Toast.makeText(main.this, "檔案下載完成", 1).show();    
  41.                 break;    
  42.               case -1:    
  43.                 String error = msg.getData().getString("error");    
  44.                 Toast.makeText(main.this, error, 1).show();    
  45.                 break;    
  46.             }    
  47.           }    
  48.           super.handleMessage(msg);    
  49.         }    
  50.       };    
  51.     @Override    
  52.     public void onCreate(Bundle savedInstanceState) {    
  53.         super.onCreate(savedInstanceState);    
  54.         setContentView(R.layout.main);    
  55.         pb=(ProgressBar)findViewById(R.id.down_pb);    
  56.         tv=(TextView)findViewById(R.id.tv);    
  57.         new Thread(){    
  58.             public void run(){    
  59.                 try {    
  60.        down_file("http://wallpaper.pocketdigi.com/upload/1/bigImage/1284565196.jpg",  
  61. "/sdcard/");    
  62.                     //下載檔案,引數:第一個URL,第二個存放路徑    
  63.                 } catch (ClientProtocolException e) {    
  64.                     // TODO Auto-generated catch block    
  65.                     e.printStackTrace();    
  66.                 } catch (IOException e) {    
  67.                     // TODO Auto-generated catch block    
  68.                     e.printStackTrace();    
  69.                 }    
  70.             }    
  71.         }.start();    
  72.     }    
  73.     public void down_file(String url,String path) throws IOException{    
  74.         //下載函式          
  75.         filename=url.substring(url.lastIndexOf("/") + 1);    
  76.         //獲取檔名    
  77.         URL myURL = new URL(url);    
  78.         URLConnection conn = myURL.openConnection();    
  79.         conn.connect();    
  80.         InputStream is = conn.getInputStream();    
  81.         this.fileSize = conn.getContentLength();//根據響應獲取檔案大小    
  82.         if (this.fileSize <= 0) throw new RuntimeException("無法獲知檔案大小 ");    
  83.         if (is == null) throw new RuntimeException("stream is null");    
  84.         FileOutputStream fos = new FileOutputStream(path+filename);    
  85.         //把資料存入路徑+檔名    
  86.         byte buf[] = new byte[1024];    
  87.         downLoadFileSize = 0;    
  88.         sendMsg(0);    
  89.         do    
  90.           {    
  91.             //迴圈讀取    
  92.             int numread = is.read(buf);    
  93.             if (numread == -1)    
  94.             {    
  95.               break;    
  96.             }    
  97.             fos.write(buf, 0, numread);    
  98.             downLoadFileSize += numread;    
  99.             sendMsg(1);//更新進度條    
  100.           } while (true);    
  101.         sendMsg(2);//通知下載完成    
  102.         try    
  103.           {    
  104.             is.close();    
  105.           } catch (Exception ex)    
  106.           {    
  107.             Log.e("tag", "error: " + ex.getMessage(), ex);    
  108.           }    
  109.     }    
  110.     private void sendMsg(int flag)    
  111.     {    
  112.         Message msg = new Message();    
  113.         msg.what = flag;    
  114.         handler.sendMessage(msg);    
  115.     }        
  116. }    

相關推薦

Android檔案下載進度實現

package com.pocketdigi.download;    import java.io.FileOutputStream;    import java.io.IOException;    import java.io.InputStream;    import java.net.URL; 

Android百分比下載進度

        現在很多APP中都會整合下載功能,所以有一個方便好看又實用的進度條來展示下載進度很有必要,也能提高使用者體驗,在這裡我就把專案裡的下載進度條抽取出來分享給大家,話不多說,先看效果圖:這個進度條是自定義的一個View,其中有一個自定義屬性就是百分比文字的大小(也

Android實現下載進度圖示效果

我們在開發中 有時候會遇到 點選一個圖示然後進行下載 並且需要在圖示上面加上進度條 像下面這樣的效果 先說下這個效果的實現,首先我們使用自定義view,在onDraw()方法中使用畫筆畫出外面的進度條 mPaint.setAnti

Python 實現下載進度(不帶GUI界面)

Python requests 進度條 話不多說,先上圖該Python代碼可以實現獲取下載的文件名,下載文件的大小,下載速度等。 代碼關鍵點: 1、關於下載文件名的獲取:代碼裏使用兩種方式獲取:(1) 通過Content-Disposition屬性,該屬性是作為對下載文件的一個標識字段,存儲著下載

PHP 遠程文件下載進度實現

其他 compact AS lose 信息 tint spinner ajax style download.php 1 <?php 2 // 當前文件:download.php 3 4 $action = @$_GET[‘action‘]; 5

專案常見功能(1) 下載 批量下載檔案下載 下載進度

最通用的就是讀取伺服器上檔案,response 設定響應頭讓瀏覽器知道這是要下載的,然後response相應即可 1、ajax 響應內容只能是字串,不能是流所以  不能傳送請求下載檔案,要使用window.location.href= url  或者 <a href="

Android】一、Progress進度實現的三種方式:主執行緒實現,Service載入,動態建立

前言 更新版本,上傳資料到服務端,都是需要進度顯示的,Android進度顯示兩種方式 ProgressDialog 和 ProgressBar 新版本中ProgressDialog不被推薦使用,所以專案採用ProgressBar 分為三種實現方式: 1、MainAct

Android 打造形形色色的進度 實現可以如此簡單

1、概述 最近需要用進度條,秉著不重複造輪子的原則,上github上搜索了一番,看了幾個覺得比較好看的ProgressBar,比如:daimajia的等。簡單看了下程式碼,基本都是繼承自View,徹徹底底的自定義了一個進度條。盯著那絢麗滾動條,忽然覺得,為什麼要通過View去寫

專案常見功能(1) 下載 批量下載檔案下載 下載進度

最通用的就是讀取伺服器上檔案,response 設定響應頭讓瀏覽器知道這是要下載的,然後response相應即可 1、ajax 響應內容只能是字串,不能是流所以  不能傳送請求下載檔案,要使用window.location.href= url  或者 <a href=

基於AJAX的檔案上傳顯示進度實現

      基於Ajax的檔案上傳要實現的功能要求,要在使用者提交了上傳按鈕請求後,客戶端其頁面要顯示檔案上傳進度條。       其整個功能時序圖如圖所示。       簡單的說,要實現在客戶端顯示進度條,需要做的是:當客戶端提交上傳檔案請求後,伺服器在上傳檔案

Android自定義圓形進度實現程式碼

基本思路是這樣的: 1.首先繪製一個實心圓 2.繪製一個白色實心的正方形,遮住實心圓 3.在圓的中心動態繪製當前進度的百分比字元 4.繪製一個與之前實心圓相同顏色的空心圓 5.逐漸改變當前的百分比 6.根據百分比,逐漸改變正方形的大小,逐漸減小正方形的底部y軸的座標,不斷重繪

一行程式碼實現android檔案下載

起源 本文主要介紹開源專案Aria的使用。 Aria專案源於15年工作中遇到的一個檔案下載管理的需求,當時被下載折磨的痛不欲生,從那時起便萌生了編寫一個簡單易用,穩當高效的下載框架,aria經歷了1.0到3.0的開發,算是越來越接近當初所制定的目標了。 以

android仿照IOS AppStore下載進度

下面有效果圖,本人也是在網上搜集進度條之後修改而成,不喜勿噴! 先上效果圖 public class TasksCompletedView2 extends View {// 畫最外邊圓環的畫筆private Paint mCirclePaint;// 畫圓環的畫筆pr

Android 打造形形色色的進度 實現可以如此簡單

轉載請標明出處:http://blog.csdn.net/lmj623565791/article/details/43371299 ,本文出自:【張鴻洋的部落格】1、概述最近需要用進度條,秉著不重複造輪子的原則,上github上搜索了一番,看了幾個覺得比較好看的Progre

Android閃屏頁圓形倒計時進度實現

前言 現在我們的App中基本都會有閃屏頁面,而閃屏頁中大多又都會加入廣告資訊或者我們自己logo等宣傳圖片的展示,類似如下效果: 思路 使用自定義View,通過View的重繪方法Invalidate()在onDraw()中不斷繪製不同弧度的圓弧來改

Android檔案下載實現斷點續傳)

http://www.ideasandroid.com/archives/328#more-328 本文將介紹在android平臺下如何實現多執行緒下載,大家都知道,android平臺使用java做為開發語言,所以java中支援的多執行緒下載方式在android平臺下都支援,

Android 仿微信載入H5頁面進度實現

前言 Android中WebView打卡前端頁面時受到網路環境,頁面內容大小的影響有時候會讓使用者等待很久。顯示一個載入進度條可以提升很大的體驗。微信內訪問H5頁面載入效果不錯,效仿著寫了一個。 1

Android 下載進度傳遞問題!!!分都不是事 50C

有一個下載管理器,在下載的時候能得到進度條,我要怎麼把進度條傳到另一個Activity, 當另一個Activity開啟的時候能得到從mainActivity中得到進度條,並且動態改變進度條 可能會有多個下載任務 !!!

Visual C++利用互斥量同步執行緒實現檔案讀取進度

忘了原文的位置了。 一、前言         檔案讀取進度條的實現可以有很多種方法,常用的是在讀取檔案的過程中隔一定時間向對話方塊傳送訊息以控制進度條的位置,但是這種方法很難確定隔多少時問傳送一個訊息,因為檔案的大小是不確定的,時間間隔長了可能檔案已經讀取完了還沒有傳送訊

python 實現下載進度的方法

tps 轉化 locks import print class req stand exce 第一種(簡單).python實現簡單的進度條的方法 import sys for i in range(101): s="\r%d%% %s"%(i,"#"*i)