是否有可能以某种方式获得此 http 代码?
目前,没有。即使下载失败,DownloadManager 也会报告 STATUS_SUCCESSFUL,例如因为找不到 url/文件 (HTTP 404)(这是一个错误)。
另见DownloadManager sends STATUS_SUCCESSFUL for failed download
我知道这是一个相对较旧的线程,但这个问题仍然存在。我在 5 分钟前测试了它,它仍然无法正常工作。
是否可以在不不断查询下载管理器的情况下收听“下载暂停”事件?
奇怪的是,没有。唯一可用的“事件”监听是:
要解决此问题,您必须每 X 次通过检查自己查询状态
if (cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_PAUSED) {
// Do stuff
}
下载管理器(API 级别 16+)是否支持 https (ssl)?
它过去不支持 https(在Android DownloadManager and SSL (https) 中阅读更多内容),但现在支持。您可以通过尝试从 https 源检索文件来简单地进行验证,例如 https://mdn.mozillademos.org/files/3794/mixed_content_webconsole.jpg。您会看到它可以正常检索文件。
下载管理器重试策略到底是什么?我可以更改它的默认重试策略吗?
目前无法更改重试“策略”。查看the docs,您会发现没有关于此功能的方法或属性。
关于默认重试策略,可以在以下包中找到有用的信息:com.android.providers.downloads.Constants。这链接到 5.1.1 版本,如果您需要其他版本的信息,您可以手动导航到该版本。例如here是android 4.0.1的信息(重试策略值与5.1.1相同)。
它说:
下载管理器在放弃之前在没有任何进展的情况下重试其网络操作的次数。
public static final int MAX_RETRIES = 5;
下载管理器接受 Retry-After 响应标头的最短时间,参数以 delta-seconds 为单位。
public static final int MIN_RETRY_AFTER = 30; // 30s
下载管理器接受 Retry-After 响应标头的最长时间,参数以 delta-seconds 为单位。
public static final int MAX_RETRY_AFTER = 24 * 60 * 60; // 24h
正如您可能已经猜到的那样,这些是最终的(常量),因此无法更改。
结论:DownloadManager 对于一些基本的下载非常有用,但它的功能非常有限。
我可以建议一个替代方案:在https://github.com/Trinea/android-commonhttps://github.com/Trinea/android-common 的 android-common 库中有一个 downloadmanager
我自己没用过,但是github上2k+的star通常意味着值得一试。