Tal*_*nel 6 ssl https android android-download-manager
根据文档,如果由于http错误导致下载失败 - COLUMN_REASON应该保留特定的http错误代码.
我遇到的问题是,在实践中,我看到下载失败的唯一原因是 ERROR_HTTP_DATA_ERROR
另外,我在logcat中看到运行时实际失败的http代码,当下载停止并重新尝试时,但我没有看到任何方法从下载管理器获取它.
有可能以某种方式得到这个http代码?
我正在使用广播接收器来处理ACTION_DOWNLOAD_COMPLETE,但我没有看到任何方式听下载暂停,我感觉如果我将在重试尝试之间查询下载管理器失败原因 - 那么我'我会得到实际的状态代码.
是否可以在不查询下载管理器的情况下收听"下载暂停"事件?
我希望这将是这样的广播.
我最终想要得到答案的问题是:
Tim*_*Tim 11
有可能以某种方式得到这个http代码?
目前,没有.STATUS_SUCCESSFUL即使下载失败,DownloadManager 也会报告,例如因为找不到url /文件(HTTP 404)(这是一个错误).
另请参阅DownloadManager发送STATUS_SUCCESSFUL以进行失败下载
我知道这是一个相对较老的线程,但问题仍然存在.我在5分钟前测试过它仍然无法正常工作.
是否可以在不查询下载管理器的情况下收听"下载暂停"事件?
要解决这个问题,您必须通过检查每X次查询一次状态
if (cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_PAUSED) {
// Do stuff
}
Run Code Online (Sandbox Code Playgroud)
是下载管理器(API级别16+)支持https(ssl)?
它曾经不支持https(在Android DownloadManager和SSL(https)中阅读更多内容),但现在它确实如此.例如,您可以通过尝试从https源检索文件来进行验证https://mdn.mozillademos.org/files/3794/mixed_content_webconsole.jpg.你会看到它检索文件很好.
下载管理器重试策略究竟是什么?我可以更改默认重试政策吗?
目前无法更改重试"政策".查看文档,您会发现没有关于此功能的方法或属性.
关于默认重试策略,可以在以下包中找到有用的信息:com.android.providers.downloads.Constants.这链接到5.1.1版本,如果您需要其他版本的信息,您可以手动导航到该版本.例如,这里是android 4.0.1的信息(重试策略值与5.1.1中的相同).
它指出:
下载管理器在放弃之前没有进展时重试其网络操作的次数.
Run Code Online (Sandbox Code Playgroud)public static final int MAX_RETRIES = 5;下载管理器接受带有delta-seconds参数的Retry-After响应头的最短时间.
Run Code Online (Sandbox Code Playgroud)public static final int MIN_RETRY_AFTER = 30; // 30s下载管理器接受带有delta-seconds参数的Retry-After响应头的最长时间.
Run Code Online (Sandbox Code Playgroud)public static final int MAX_RETRY_AFTER = 24 * 60 * 60; // 24h
正如您可能已经猜到的那样,这些是最终的(常数),因此无法更改.
结论:DownloadManager对于进行一些基本下载非常有用,但它的功能非常有限.
我可以建议一个替代方案:在https://github.com/Trinea/android-common上有一个android-common libary 的下载管理器 我自己没有使用它,但是github上的2k +星通常意味着它值得一试.