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下载管理器的网络呼叫。