2011-05-09 64 views
3

如何顯示文件的剩餘KB的文件將被下載在Android的進度條。 如12KB/120KB是remaining..then 97KB/120KB ...等等在android中的文件下載進度條

我們能有這樣的進度對話框,如下圖所示enter image description here

回答

1

的最好方法是什麼您所描述的是使用AsyncTask執行下載。在onProgressUpdate方法中,您可以更新ProgressDialog以指示用戶完成百分比。它看起來像:

ProgressDialog Screenshot

0

可以使用進度對話框,在該文檔中討論。另外(也許更優雅),你可以在你的活動的標題欄中使用進度指示器。然後通過調用setProgress(int)你可以提示進度

requestWindowFeature(Window.FEATURE_PROGRESS); 

:在您的活動,呼籲setContentView之前,加入這一行。當進度達到10000時,標題欄中的進度指示器消失。請注意,如果您確定非UI線程的進度,則應該使用處理程序調用setProgress

+0

如何計算剩餘文件的KB的..? – Jitesh 2011-05-09 14:38:42

+1

通常,服務器響應包含內容長度http標頭。如果沒有,那麼你無法知道總尺寸,你需要使用一個不確定的進度(只是一個沒有進度指示器的紡車)。爲此,您需要使用'requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);' – 2011-05-09 14:44:00

+0

@ Ted-Hopp是的,我有內容長度http header ..但是我需要在窗體中顯示如我已經接近的圖像** 52kb的118kb ** – Jitesh 2011-05-09 14:53:20

2
class DownloadFileAsync extends AsyncTask<String, String, String> { 
     private ProgressDialog mProgressDialog; 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      mProgressDialog = new ProgressDialog(UrlTestActivity.this); 
      mProgressDialog.setMessage("Downloading file.."); 
      mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
      mProgressDialog.setCancelable(false); 
      mProgressDialog.show(); 
     } 

     @Override 
     protected String doInBackground(String... aurl) { 
      int count; 
      try { 

       for (int i = 0; i < 3; i++) { 
        URL url = new URL("http://nodeload.github.com/nexes/Android-File-Manager/zipball/master"); 
        URLConnection conexion = url.openConnection(); 
        conexion.connect(); 
        int lenghtOfFile = conexion.getContentLength(); 
        InputStream is = url.openStream(); 
        File testDirectory = new File(Environment.getExternalStorageDirectory() + "/Folder"); 
        if (!testDirectory.exists()) { 
         testDirectory.mkdir(); 
        } 
        FileOutputStream fos = new FileOutputStream(testDirectory+ "/"+(i+100)+".zip"); 
        byte data[] = new byte[1024]; 
        long total = 0; 
        int progress = 0; 
        while ((count = is.read(data)) != -1) { 
         total += count; 
         int progress_temp = (int) total * 100/lenghtOfFile; 
         publishProgress(""+ progress_temp); 
         if (progress_temp % 10 == 0 && progress != progress_temp) { 
          progress = progress_temp; 
         } 
         fos.write(data, 0, count); 
        } 
        is.close(); 
        fos.close(); 
       } 
      } catch (Exception e) {} 
      return null; 

     } 
     protected void onProgressUpdate(String... progress) { 
      Log.d("ANDRO_ASYNC",progress[0]); 
      mProgressDialog.setProgress(Integer.parseInt(progress[0])); 
     } 

     @Override 
     protected void onPostExecute(String unused) { 
      dismissDialog(DIALOG_DOWNLOAD_PROGRESS); 
     } 
    } 
1
progressDialog.setMax(fileLength/1000); 

publishProgress(String.valueOf(total /1000)); 

下面的代碼是唯一的API後可用11

progressDialog. setProgressNumberFormat ("%1d kb of %2d kb");