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

标签 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;

我注意到 bytes_total 的值在状态 STATUS_RUNNING 期间保持为 -1,只有在下载完成时才会填满。那么我怎样才能用这个计算更新进度条。 请帮助...

最佳答案

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

这很可能是由于服务器未发送必要的元数据而发生的。如果您正在使用 Android 模拟器尝试此操作,您可以使用 Wireshark 或任何其他数据包监控软件来检查它,以查看服务器是否支持完成我的 Android 下载管理器的网络调用。

关于Android 下载管理器。COLUMN_TOTAL_SIZE_BYTES 在状态运行期间返回 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31156684/

相关文章:

android - Volley 请求不带参数

android - 单击后隐藏 ListView

java - 将一些数据放入android程序中

自动下载内容的 iOS 应用程序(关于 App Store 政策)

objective-c - 如何拦截来自 WKWebView 的下载?

android - 如何取消像whatsapp这样的图片和视频上传

java - map 在 Nexus 5X API 28 中崩溃,但在 Google PIXEL 2 XL API 27 中运行完美

R 从 URL 下载图片

android - 进度条没有填满它应该填满的空间

android - ProgressBar 不会在代码中到处加载