Android下载管理器.COLUMN_TOTAL_SIZE_BYTES在状态运行期间返回-1

时间:2015-07-01 08:49:36

标签: android download android-progressbar android-download-manager download-manager

嗨,在我的Android应用程序中,我需要从服务器下载媒体文件,因为我使用了下载管理器服务。而且我想在ui中显示下载的进度。下载工作完美但进度条仅在状态变为STATUS_SUCCESSFUL时才更新。我使用以下代码查找下载数据的百分比,

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;

我注意到在状态STATUS_RUNNING期间,bytes_total的值保持为-1,只有在下载完成后它才会填满。那么如何通过此计算更新进度条。 请帮忙......

1 个答案:

答案 0 :(得分:0)

这可能是由于服务器不支持http HEAD或OPTION调用。当我使用Simple Python服务器尝试使用时,我遇到了类似的问题,其中我将COLUMN_TOTAL_SIZE_BYTES的值设为-1。但是当我尝试使用apache tomcat时,这个问题就解决了。

最有可能的原因是服务器没有发送必要的元数据。如果您使用Android模拟器尝试此操作,可以使用Wireshark或任何其他数据包监控软件来检查这一点,以查看服务器是否支持网络调用完成了我的Android下载管理器。