是否有可能得到某種程度上這個http代碼?
目前,沒有。即使下載失敗,DownloadManager也會報告STATUS_SUCCESSFUL
,例如因爲未找到url /文件(HTTP 404)(這是一個錯誤)。
另請參閱DownloadManager sends STATUS_SUCCESSFUL for failed download
我知道這是一個相對老的線程,但該問題仍然存在。我在5分鐘前測試了它,但它仍然無法正常工作。
,纔有可能聽「下載暫停」事件,而不經常查詢下載管理器?
奇怪的是,沒有。唯一可用的「事件」監聽是:
爲了解決這個問題,必須通過檢查
if (cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_PAUSED) {
// Do stuff
}
查詢狀態自己每隔X時間下載管理器(在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
正如你可能已經猜到了,這是最後的(常量),因此不能改變。
結論:下載管理器是做一些基本的下載非常有用的,但它的功能是相當有限。
我可以建議一種替代方案:有過在https://github.com/Trinea/android-common 我沒有用它自己,但2K在github +明星是在Android常見libary一個downloadmanager通常意味着它是值得一試。
@TimCastelijns:同意,但給我一個休息......: - >這個問題其實對我更重要,那麼原來的問題 –