我正在使用下载管理器 https://developer.android.com/reference/android/app/DownloadManager.html#STATUS_PAUSEDAndroid 中通过 https URL 下载文件的服务,例如https://www.antennahouse.com/XSLsample/pdf/sample-link_1.pdf https://www.antennahouse.com/XSLsample/pdf/sample-link_1.pdf。这些文件(当前)不受密码保护,以防产生任何影响。
一旦我将下载请求加入队列,DownloadManager 就会开始下载,但它似乎挂起。当我检查状态时,我得到
COLUMN_BYTES_DOWNLOADED_SO_FAR: 0
COLUMN_STATUS: 4
COLUMN_REASON: 1
COLUMN_STATUS 4 是状态_暂停 https://developer.android.com/reference/android/app/DownloadManager.html#STATUS_PAUSED,“当下载等待重试或恢复时。”
COLUMN_REASON 1 是PAUSED_WAITING_TO_RETRY https://developer.android.com/reference/android/app/DownloadManager.html#PAUSED_WAITING_TO_RETRY,“当下载由于某些原因而暂停时发生网络错误并且下载管理器在重试请求之前正在等待。”但似乎没有办法确定发生了什么网络错误。下载从未成功完成。
我检查了 logcat 监视器是否有相关警告和错误,但没有发现任何结果。
我已经在多个不同的服务器(内部和公共)上尝试过此操作,但结果相同。
没有明显的网络问题:Wi-Fi 连接已连接,并且可以下载使用 http:// 工作得很好:文件被立即下载并出现在指定目的地的文件系统中。
对于 https 下载,我们的服务器日志显示文件正在成功送达从服务器的角度来看。在 a 中测试相同的 https URLbrowser在笔记本电脑上成功下载文件,开发人员工具网络面板中没有出现任何明显问题或额外的协商。
我的代码(总结):
sManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
DownloadManager.Request req = new DownloadManager.Request(sourceURI);
final Uri destinationUri = Uri.fromFile(destinationFile);
req.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI
| DownloadManager.Request.NETWORK_MOBILE)
.setDestinationUri(destinationUri)
.setMimeType(...);
long id = sManager.enqueue(req);
摘要:通过 DownloadManager 启动的 https 下载会无限期挂起,而相同的 https 下载在浏览器中工作正常,而纯 http 下载在使用 DownloadManager 的同一应用程序中工作正常。我得到的最好线索是PAUSED_WAITING_TO_RETRY
表示“发生一些网络错误”。如何确定网络错误是什么?