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
通過不同的溶劑解決它(編輯),但你的鏈接幫助我瞭解如何與接收者合作。謝謝 –