До когда менеджер загрузки Android получит статус загрузки, загрузите ссылку Id?

У меня есть прецедент, где

Я начал загрузку файла с помощью диспетчера загрузки Android, а в середине отключил мобильный. Когда я снова перезагрузился, загрузка продолжится и завершится. Я получил статус, указав идентификатор ссылки загрузки. Но я хотел бы узнать статус даже через 10 дней с использованием этого идентификатора ссылки.

Итак, мой вопрос до тех пор, пока менеджер загрузки Android не предоставит статус загрузки по ссылке ссылки на скачивание?

Я просмотрел документацию и прошел через стек над потоком, но не смог найти ответ. Кто-то помогает мне.

Ответы

Ответ 1

Android DownloaderManager - это системная служба. Предполагается, что он работает всегда. Но есть случаи, когда он не может работать.

Загрузка происходит через постоянное соединение HTTP. Это означает, что одно и то же установленное соединение используется для последовательного HTTP-запроса/ответа. Ошибка соединения означает, что происходит ошибка, и, таким образом, вы не можете отслеживать статус по идентификатору ссылки.

Вы отслеживаете службу Android DownloadManager, где служба Android DownloadManager получает код STATUS с сервера.

Android DownloadManager использует загрузку content-length с сервера. Заголовок content-length не позволяет передавать потоки (ссылка). Загрузка на основе длины контента имеет преимущество возобновления, паузы, частичной загрузки - см. Ссылку1 выше. Таким образом, даже когда вы перезагружаете систему, она снова перезапускает (увеличивает) загрузку.

Загрузка content-length составляет store and forward (ссылка). Вы должны пересылать буферный контент в постоянное хранилище, потому что у вас ограниченные фиксированные буферы.

Android DownloadManager имеет флаг ERROR_CANNOT_RESUME int (ссылка). ERROR_CANNOT_RESUME основан на знаке COLUMN_STATUS. Существует два типа СОСТОЯНИЯ КОЛОННЫ: STATUS_PAUSED или STATUS_FAILED. Перед отключением системы система через BroadcastReceiver отправляет службу Android DownloadManager об отключении. Затем Android DownloadManager активирует флаг STATUS_PAUSED. И когда в следующий раз при перезагрузке устройства системная служба запускается автоматически, проверяет, запускает ли STATUS_PAUSED снова загрузку.

Ответ:, пока не произойдет ошибка (на стороне клиента, на сервере или на стороне сервера), или вы не закончили загрузку файла (это означает, что до STATUS_SUCCESSFUL), вы продолжаете получать статус от Android DownloadManager. Вы не можете получить статус, когда произойдет STATUS_FAILED - он говорит, что загрузка не будет повторена (ссылка).

Как происходит STATUS_FAILED? Клиент DownloadManager обнаруживает код состояния HTTP 4XX (сервер догадывается, что клиент ошибается) и 5XX (сервер обнаруживает, что сервер ошибается) (ссылка), теперь STATUS_FAILED становится истинным.

Некоторые другие ситуации: Когда клиенты остаются выключенными и на основе серверной логики, сервер может завершить соединение с таймаутом. Таким образом, этот элемент управления явно основан на разных HTTP-серверах. Мы не можем просить эти много дней здесь. Мы не знаем логики на стороне сервера. Статусные коды основаны на сервере. Когда сервер решает, что клиент потерпел неудачу, а затем сервер timeout делает соединение STATUS_FAILED активным на стороне сервера. клиенты должны быть готовы к тому, что соединения TCP исчезнут в произвольные моменты времени и должны иметь возможность восстановить соединение и повторить запрос HTTP. Преждевременно закрытое соединение не должно рассматриваться как ошибка; ошибка будет указана только в случае сбоя попытки восстановить соединение. В вашем вопросе нет точного ответа.

Примечание: TCP connections to disappear at arbitrary times (ссылка) является основной логикой здесь, которая может возобновить ваше соединение после определенное количество дней вашего устройства отключено.

1) На STATUS_FAILED вы не можете продолжать отслеживать дальнейшие данные.

2) Вкл. Если COLUMN_STATUS не является ни STATUS_FAILED, ни STATUS_PAUSED, это значение столбца undefined, здесь вы не сможете отслеживать дальнейшие данные.

- все, кроме выше двух условий, выполняется загрузка.

Ответ 2

Вы можете использовать SharedPreferences для хранения идентификатора ссылки для загрузки. Что-то вроде этого -

SharedPreferences settings = getSharedPreferences("DownloadIDS", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putLong("downloadIds", downloadID);
editor.commit();

Вы можете получить идентификатор позже при использовании этого

SharedPreferences downloadids = context.getSharedPreferences("DownloadIDS", 0);
long savedDownloadIds = downloadids.getLong("downloadIds", 0);