私はのようなhttps URLでファイルをダウンロードするために、AndroidのDownloadManagerサービスを使用しています。このファイルは、(現在)パスワードで保護されているわけではありません。httpsのダウンロードがPAUSED_WAITING_TO_RETRYで一時停止するのはなぜですか?
ダウンロード要求をエンキューすると、DownloadManagerがダウンロードを開始しますが、ハングアップしているようです。私は状態を確認すると、私はCOLUMN_STATUS 4
COLUMN_BYTES_DOWNLOADED_SO_FAR: 0
COLUMN_STATUS: 4
COLUMN_REASON: 1
を得る「ダウンロードが再試行または再開を待っているとき。」、STATUS_PAUSEDですネットワークエラーが発生し、ダウンロードマネージャが要求を再試行する前に待機しているため、ダウンロードが一時停止されたときに ""と表示されます。しかし、がどのようなネットワークエラーが発生したかは、と判断する方法がないようです。ダウンロードは正常に完了しません。
私は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のダウンロードは、ブラウザで正常に動作、およびプレーンHTTPのダウンロードが使用して同じアプリで正常に動作しながら、httpsのダウンロードは、無期限DownloadManagerがハング経由で開始しましたダウンロードマネジャー。私が持っている最高の手がかりは、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