3

嗨,在我的android應用程序中,我需要從服務器下載媒體文件,因爲我使用了Download Manager服務。並且我還想在ui中顯示下載的進度。下載工作完美,但只有當狀態變爲STATUS_SUCCESSFUL時,進度條纔會更新。我用下面的代碼查找下載的數據的百分比,Android下載manager.COLUMN_TOTAL_SIZE_BYTES在狀態運行期間返回-1

DownloadManager.Query q = new DownloadManager.Query(); 
       q.setFilterById(enqueue); 
       Cursor cursor = dm.query(q); 
       cursor.moveToFirst(); 
int bytes_downloaded = cursor.getInt(cursor      .getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR)); 
int bytes_total = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));  
final long dl_progress = (bytes_downloaded*100L)/bytes_total; 

我已經注意到,bytes_total的值保持狀態-1 STATUS_RUNNING時,它只是填補了下載完成時。那麼我怎樣才能用這個計算來更新進度條。 請幫忙...

+0

在某些設備上,根據[doc](http://developer.android.com/reference/android/app/DownloadManager.html#COLUMN_TOTAL_SIZE_BYTES),字節數保持爲-1,這是初始值。 – david

回答

0

這可能是由於服務器不支持http HEAD或OPTION調用。當我用簡單的Python服務器嘗試這個時,我遇到了類似的問題,其中COLUMN_TOTAL_SIZE_BYTES的值爲-1。但是當我用apache tomcat嘗試時,這個問題已經解決了。

這很可能是由於服務器沒有發送必要的元數據而發生的。如果您正在使用Android模擬器嘗試此操作,則可以使用Wireshark或任何其他數據包監視軟件查看該服務器是否支持完成我的Android下載管理器的網絡呼叫。