我在Android中使用DownloadManager服務通過https URL下載文件,例如https://www.antennahouse.com/XSLsample/pdf/sample-link_1.pdf。這些文件沒有(當前)密碼保護,以防有什麼區別。爲什麼https下載暫停PAUSED_WAITING_TO_RETRY?
一旦我排隊下載請求,下載管理器開始下載,但它似乎掛起。當我檢查狀態,我得到
COLUMN_BYTES_DOWNLOADED_SO_FAR: 0
COLUMN_STATUS: 4
COLUMN_REASON: 1
COLUMN_STATUS 4 STATUS_PAUSED,「當下載等待重試或恢復。」
COLUMN_REASON 1 PAUSED_WAITING_TO_RETRY,「當下載被暫停,因爲發生一些網絡錯誤,下載管理器是重試之前等待的請求。」但似乎沒有辦法確定發生了什麼網絡錯誤。下載從未成功完成。
我已經檢查了logcat監視器的相關警告和錯誤,但什麼都沒發現。
我已經嘗試過使用多個不同的服務器,無論是在公司內部還是在公共場合,都有相同的結果。
沒有明顯的網絡問題:在Wi-Fi連接起來,並使用HTTP下載://工作就好:文件被下載立即出現,並在指定的目標文件系統。
在https下載的情況下,我們的服務器日誌顯示,從服務器的角度來看,文件正在成功服務。在筆記本電腦上的瀏覽器中測試相同的https URL會導致文件成功下載,而不會在開發人員工具網絡面板中顯示任何明顯的問題或額外的協商。
我的代碼(總結):
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);
摘要:一個HTTPS下載通過下載管理器開始無限期掛起,而相同的HTTPS下載在瀏覽器中正常工作,並且普通HTTP下載使用做工精細用相同的應用程序下載管理器。我有最好的線索是PAUSED_WAITING_TO_RETRY
表示「發生了一些網絡錯誤。」我如何確定網絡錯誤是什麼?
您確定URL的SSL證書是由Android所信任的CA頒發的嗎? –
在Android上,實際下載的組件[似乎使用'HttpURLConnection'](https://android.googlesource.com/platform/packages/providers/DownloadProvider/+/master/src/com/android/providers /downloads/DownloadThread.java)。您可以使用'HttpURLConnection'(或修改[我的一個]](https://github.com/commonsguy/cw-omnibus/tree/v8.1/Service/Downloader)將一個快速和骯髒的應用程序混合在一起)以及看看你得到了什麼。我同意Prerak,這感覺就像一個SSL握手問題。 – CommonsWare
@PrerakSola:好問題。我會研究它。 – LarsH