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

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

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

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

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

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

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

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

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

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

Android DownloadManager имеет флаг ERROR_CANNOT_RESUME int ( ссылка ). ERROR_CANNOT_RESUME основан на флаге COLUMN_STATUS . Существует два типа СОСТОЯНИЯ STATUS_PAUSED : 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-серверах. Мы не можем просить эти много дней здесь. Мы не знаем логики на стороне сервера. Статусные коды основаны на сервере. Когда сервер решает, что клиент потерпел неудачу, а затем сервер STATUS_FAILED соединение, которое делает STATUS_FAILED активным на стороне сервера. Клиенты должны быть готовы к тому, что соединения TCP исчезнут в произвольные моменты времени и должны иметь возможность восстановить соединение и повторить запрос HTTP. Преждевременно закрытое соединение не должно рассматриваться как ошибка; Ошибка будет указана только в случае сбоя попытки восстановить соединение. У вашего вопроса нет точного ответа.

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

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

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

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

Вы можете использовать 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);