同时下载文件 - 最好的方式来处理它

问题描述:

我正在编写一个针对API等级9或更高的应用程序。所以,我决定使用SDK提供的DownloadManager类。 我的问题是2部分 - 1.当我下载单个文件时,如何显示下载的进度 。我看到我可以从查询下载管理器 实例中获得COLUMN_TOTAL_SIZE_BYTES和 COLUMN_BYTES_DOWNLOADED_SO_FAR。但我不确定是否必须将查询放在一个线程中,并且执行一个循环以便我可以定期轮询以更新进度 。我想,我不确定,如何定期查询 - 它会在 的主线程中执行还是作为可运行的 - 我的机制 不清楚。 2.如果我必须支持多个文件下载,那么我是否必须 在它自己的线程中启动它们中的每一个? 谢谢。同时下载文件 - 最好的方式来处理它

如果您使用的是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