San*_*ada 16 android download download-manager android-download-manager
我有一个用例,
我开始使用android下载管理器下载文件,并在中间关掉手机.当我再次重新启动时,下载继续并完成.我通过提供下载引用ID获得了状态.但是我想知道使用该引用ID 10天后的状态.
所以我的问题是直到android下载管理器将通过下载参考ID给出下载状态?
我查看了文档并通过堆栈进行了流程,但无法找到答案.有人帮助我.
AndroidDownloaderManager是一个系统服务。它应该始终运行。但也有一些情况无法运行。
下载通过 HTTP 持久连接进行。这意味着相同的已建立连接用于连续的 HTTP 请求/响应。连接中断意味着发生错误,因此您无法通过引用 ID 跟踪状态。
您可以通过 AndroidDownloadManager服务进行跟踪,AndroidDownloadManager服务STATUS从服务器获取代码。
Android DownloadManager 使用content-length基于服务器的下载。标Content-Length头不允许流式传输(链接)。基于内容长度的下载具有恢复、暂停、部分下载的优点——请参见上面的链接1。因此,即使您重新启动系统,它也会再次重新启动(增量)下载。
基础content-length下载是store and forward(链接)。您应该将缓冲的内容转发到持久存储,因为您的固定缓冲区有限。
AndroidDownloadManager有ERROR_CANNOT_RESUME int标志(链接)。这ERROR_CANNOT_RESUME是基于COLUMN_STATUS旗帜的。列状态有两种类型:STATUS_PAUSED或STATUS_FAILED。在系统关闭之前,系统通过BroadcastReceiverAndroidDownloadManager服务发送有关关闭的信息。DownloadManager然后Android激活STATUS_PAUSED标志。并且,当您下次重新启动设备时,系统服务会自动运行,检查是否 STATUS_PAUSED 然后再次开始下载。
答案:所以直到发生错误(在客户端、连接或服务器端)或者您没有完成下载文件(这意味着直到STATUS_SUCCESSFUL),您将不断从 Android 获取状态DownloadManager。当发生这种情况时,您无法获取状态STATUS_FAILED- 它表示不会重试下载(链接)。
怎么STATUS_FAILED会发生?客户端的DownloadManager服务检测到 HTTP 状态代码 4XX(服务器猜测客户端错误)和 5XX(服务器检测服务器错误)(链接),现在STATUS_FAILED变为 true。
其他一些情况:
当客户端保持关闭状态时,基于服务器逻辑,服务器可以超时终止连接。所以,这个控制是明确基于不同的HTTP服务器的。这么多天我们不能在这里问。我们不知道服务器端逻辑。status_codes 基于服务器。当服务器判定客户端失败时,服务器会在服务器端激活timeout连接。STATUS_FAILED客户端必须做好 TCP 连接在任意时间消失的准备,并且必须能够重新建立连接并重试 HTTP 请求。过早关闭的连接不应被视为错误;仅当尝试重新建立连接失败时才会发出错误信号。
你的问题没有确切的答案。
注意:(TCP connections to disappear at arbitrary times链接)是这里的主要逻辑,可以在设备关闭一定天数后恢复连接。
1) 在 上STATUS_FAILED,您无法继续跟踪更多数据。
2) 如果COLUMN_STATUS既不是STATUS_FAILED也不是STATUS_PAUSED,则该列的值未定义,此时您可能无法跟踪进一步的数据。
-- 除上述两种情况外,均表示下载正在进行中。