2015-09-20 2 views
4

Согласно documentation, если загрузка не удалась из-за ошибки http - COLUMN_REASON должен содержать определенный код ошибки HTTP.DownloadManager: ознакомьтесь с политикой повторных попыток и кодами ошибок

проблема у меня в том, что на практике, единственное значение, поэтому я вижу, когда загрузка потерпеть неудачу ERROR_HTTP_DATA_ERROR

также, я вижу в LogCat фактический код ошибки HTTP во время выполнения, когда загрузка остановлена, то и повторите попытку, но я не вижу способа получить его от менеджера загрузки.

можно ли как-то получить этот http-код?

Я использую широковещательный приемник для обработки ACTION_DOWNLOAD_COMPLETE, но я не вижу, чтобы какой-либо способ прослушивания загрузки приостановился, и у меня возникает ощущение, что если я запрошу у администратора проблемы с ошибкой между попытками повтора он делает - тогда я получу фактический код состояния.

Можно ли прослушивать событие «загрузить паузу» без постоянного запроса менеджера загрузки?

Ожидаю, что будет такая трансляция.

вопросы, которые я хотел бы, чтобы, наконец, получить ответы на следующие:

  • это можно слушать «скачать пауза» событие, не запрашивая постоянно менеджер загрузок, и без активного слушателя к распознаватель содержимому ?
  • Менеджер загрузки (на уровне API 16+) поддерживает https (ssl)?
  • Что такое политика повторной загрузки диспетчера загрузок? могу ли я изменить его политику повторной попытки по умолчанию?
+0

@TimCastelijns: согласитесь, но дайте мне перерыв ...: -> эти вопросы на самом деле более важны для меня, чем исходный вопрос –

ответ

8

можно ли как-то это http-код?

В настоящее время нет. DownloadManager сообщает STATUS_SUCCESSFUL даже при неудачной загрузке, например, потому что url/файл не найден (HTTP 404) (это ошибка).
Также см. DownloadManager sends STATUS_SUCCESSFUL for failed download

Я знаю, что это относительно старая нить, но этот вопрос все еще остается. Я протестировал его 5 минут назад, и он все еще работает неправильно.


это можно слушать «скачать пауза» событие без постоянного запроса менеджер загрузок?

Странно, нет. Единственное доступное «событие» для прослушивания является: enter image description here

Чтобы обойти эту проблему, вы должны запрашивать статус себя каждый раз, когда X, проверяя

if (cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_PAUSED) { 
    // Do stuff 
} 

является менеджером загрузки (на уровне 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 ответа с параметром в дельта-секунд.

public static final int MIN_RETRY_AFTER = 30; // 30s 

Максимальное количество времени, что менеджер загрузки принимает для заголовка Retry-After ответа с параметром в дельта-секунд.

public static final int MAX_RETRY_AFTER = 24 * 60 * 60; // 24h 

Как вы уже догадались, это окончательная (константа) и, следовательно, не может быть изменен.


Заключение: DownloadManager очень полезен для базового скачивания, но его функциональность довольно ограничена.

Я могу предложить альтернативу: есть в Android-общем libary в downloadmanager над на https://github.com/Trinea/android-common я не использовал его сам, но 2k + звезды на GitHub обычно означает, что стоит проверить.