嗨,在我的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,只有在下载完成时才会被填满。那么我如何用这个计算更新进度条呢。请帮忙。。。
这可能是由于服务器不支持http HEAD或OPTION调用。当我在SimplePython服务器上尝试时,我遇到了类似的问题,在那里我得到了COLUMN_TOTAL_SIZE_BYTES的值为-1。但当我尝试使用apache tomcat时,这个问题得到了解决。
这很可能是由于服务器没有发送必要的元数据。如果你正在使用Android模拟器进行此操作,你可以使用Wireshark或任何其他数据包监控软件进行检查,看看服务器是否支持我的Android下载管理器进行的网络调用。