Я использую службу DownloadManager в Android для загрузки файлов через URL-адреса https, например https://www.antennahouse.com/XSLsample/pdf/sample-link_1.pdf. Файлы (в настоящее время) не защищены паролем, если это имеет значение.
Как только я помещаю запрос на загрузку в очередь, DownloadManager начинает загрузку, но кажется, что она зависает. Когда я проверяю статус, я получаю
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 наши журналы сервера показывают, что файлы успешно обслуживаются с точки зрения сервера. Тестирование тех же URL-адресов https в браузере на ноутбуке приводит к успешной загрузке файлов без каких-либо явных проблем или дополнительных согласований, отображаемых на сетевой панели инструментов разработчика.
Мой код (кратко):
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, начатая через DownloadManager, зависает на неопределенный срок, в то время как та же загрузка https отлично работает в браузере, а обычные загрузки HTTP прекрасно работают с тем же приложением, используя DownloadManager. Лучшее, что у меня есть, это то, что PAUSED_WAITING_TO_RETRY
указывает на то, что «произошла какая-то сетевая ошибка». Как я могу определить, что такое сетевая ошибка?
HttpURLConnection
. Вы можете собрать быстрое и грязное приложение, используяHttpURLConnection
(или изменить один из моих) и посмотрите, что получится. Я согласен с Прераком, что это похоже на проблему рукопожатия SSL. - person CommonsWare   schedule 02.01.2017CertificateException: CertPathValidatorException: Trust anchor for certification path not found.
Итак... Я не уверен, что это значит, учитывая, что корневой ЦС для каждого сайта является ЦС, который находится в списке доверенных устройств. - person LarsH   schedule 03.01.2017