2011-05-14 67 views
1

我正在編寫一個針對API等級9或更高的應用程序。所以,我決定使用SDK提供的DownloadManager類。 我的問題是2部分 - 1.當我下載單個文件時,如何顯示下載的進度 。我看到我可以從查詢下載管理器 實例中獲得COLUMN_TOTAL_SIZE_BYTES和 COLUMN_BYTES_DOWNLOADED_SO_FAR。但我不確定是否必須將查詢放在一個線程中,並且執行一個循環以便我可以定期輪詢以更新進度 。我想,我不確定,如何定期查詢 - 它會在 的主線程中執行還是作爲可運行的 - 我的機制 不清楚。 2.如果我必須支持多個文件下載,那麼我是否必須 在它自己的線程中啓動它們中的每一個? 謝謝。同時下載文件 - 最好的方式來處理它

回答

0

如果您使用的是2.3或以上的版本,您不需要,它會自動將其顯示在狀態欄中。像這樣做,從commonsware 代碼,

private static final int DOWNLOAD_SUCCESSFUL = 100; 
private static final int DOWNLOAD_FAILED = 99; 
    private DownloadManager mgr=null; 

上創建做到這一點,

`mgr = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);  

     registerReceiver(onComplete, 
       new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); 

`

然後在文件下載的單擊事件,

lastDownload = mgr.enqueue(new DownloadManager.Request(uri) .setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE) .setAllowedOverRoaming(false) .setTitle("Test File") .setDescription("Download zipped file.") .setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, file_name));

然後是一個廣播接收器爲wh

BroadcastReceiver onComplete=new BroadcastReceiver() { 
     public void onReceive(Context ctxt, Intent intent) { 

      findViewById(R.id.start).setEnabled(true); 

      File unzipFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),file_name);    

      //check for new file download 
      //extract if it's a new download 

      if (unzipFile.exists()) { 
       new UnzipFile().execute();    
      } else { 
       Toast.makeText(Main.this, "Download not found!", Toast.LENGTH_LONG).show(); 
      }   
     } 
    };` 
+0

在HoneyComb上,我只能在狀態欄中看到一個下載(活動下載)。在Android 2.3.3設備上,我可以看到狀態欄中的下載總數,但狀態欄中只顯示一個(或者有時候是2個最大的)活動下載進度條。我寧願在每次下載時都顯示進度條。客戶端一次最多可下載4或5個文件。有什麼建議麼?謝謝。 – 2011-05-14 04:40:44

+0

然後您必須手動執行,檢查每個文件的大小文件和實際傳輸量。我建議在服務中這樣做。 – Hades 2011-05-14 05:14:16