0

我試圖在異步任務中使用DownloadManager下載文件。這裏的doInBackground()方法下載完成時Android異步任務不停止

protected Boolean doInBackground(String... params) { 
     DownloadManager mgr = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); 
     //String DIRECTORY_DOWNLOADS = m_context.getExternalFilesDir(null).getAbsolutePath(); 

     Uri uri = Uri.parse(params[0]); 
     typ_mapy = Integer.parseInt(params[2]); 
     File download = new File(getExternalFilesDir(null) ,params[1]); 
     if(download.exists()){ 
      info = "Existuje"; 
      nazev_souboru=params[1]; 
      return false; 
     }else{ 

      try { 
       long lastDownload = mgr.enqueue(new DownloadManager.Request(uri) 
            .setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI) 
            .setAllowedOverRoaming(false) 
            .setNotificationVisibility(Request.VISIBILITY_HIDDEN) 
            .setDestinationInExternalFilesDir(m_context,"/",params[1])); 
        Cursor c = mgr.query(new DownloadManager.Query().setFilterById(lastDownload)); 
        while(c.moveToFirst()) 
        { 


         publishProgress(String.valueOf(c.getLong(c.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES))), String.valueOf(c.getLong(c.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR)))); 
         /*if(c.getLong(c.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR))>=c.getLong(c.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES))){ 
          c.close(); 
          return true; 
         }*/ 
         c.close(); 
         c = mgr.query(new DownloadManager.Query().setFilterById(lastDownload)); 
         c.moveToFirst(); 
        } 

      } catch (Exception e) { 
       return false; 
      } 
      return true; 
     } 
    } 

你可以看到我有一個評論那裏。我認爲這種情況會在下載完成時停止循環,但是當它在那裏時,它立即調用onPostExecute()(儘管下載正在運行並結束)。

問題是它停止調用onProgressUpdate()我更新我的進度欄。

有什麼辦法如何保持它在while循環,所以進度欄得到更新?如果它是這樣的話,它會停留在無盡的循環中。如果我取消註釋條件,它會立即結束。

編輯: 我解決它通過改變這樣的循環:

​​

答案在這裏找到:Show Download progress inside activity using DownloadManager

回答