móviles - manual de programacion android pdf
¿Hasta cuándo el administrador de descargas de Android dará el estado de una descarga por ID de referencia de descarga? (2)
Puede usar SharedPreferences para almacenar su ID de referencia de descarga. Algo como esto -
SharedPreferences settings = getSharedPreferences("DownloadIDS", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putLong("downloadIds", downloadID);
editor.commit();
Puede recuperar la identificación más tarde cuando usa esto
SharedPreferences downloadids = context.getSharedPreferences("DownloadIDS", 0);
long savedDownloadIds = downloadids.getLong("downloadIds", 0);
Tengo un caso de uso donde,
Comencé a descargar un archivo usando el administrador de descargas de Android, y en el medio apagué el móvil. Cuando reinicié nuevamente, la descarga continuó y se completó. Obtuve el estado al dar la ID de referencia de descarga. Pero me gustaría saber el estado incluso después de 10 días usando esa identificación de referencia.
¿Entonces mi pregunta es hasta cuándo el administrador de descarga de Android dará el estado de una descarga por ID de referencia de descarga?
Revisé la documentación y revisé la pila sobre el flujo, pero no pude encontrar la respuesta. Alguien me ayude
Android DownloaderManager
es un servicio del sistema. Se supone que se ejecuta siempre. Pero hay algunos casos en que no se puede ejecutar.
La descarga ocurre a través de la conexión persistente HTTP. Significa que se usa la misma conexión establecida para solicitudes / respuestas HTTP sucesivas. El corte de conexión significa que se produce un error y, por lo tanto, no puede rastrear el estado por ID de referencia.
Realiza un seguimiento a través del servicio DownloadManager
Android, donde el servicio Android DownloadManager
recibe el código STATUS
del servidor.
Android DownloadManager usa la descarga basada en la content-length
del content-length
del servidor. El encabezado Content-Length
no permitirá la transmisión ( enlace ). La descarga basada en la longitud del contenido tiene la ventaja de la reanudación, pausa, descarga parcial: consulte el enlace 1 anterior. Entonces, incluso cuando reinicia el sistema, de nuevo reinicia (incrementa) la descarga.
La descarga basada en la content-length
es store and forward
( enlace ). Debe reenviar el contenido almacenado en el almacenamiento persistente porque tiene búferes fijos limitados.
El Android DownloadManager
tiene ERROR_CANNOT_RESUME int
flag ( enlace ). ERROR_CANNOT_RESUME
se basa en el indicador COLUMN_STATUS
. Hay dos tipos de ESTADO DE COLUMNA: STATUS_PAUSED
o STATUS_FAILED
. Antes de que el sistema se apague, el sistema a través de BroadcastReceiver
envía el servicio Android DownloadManager
para que se apague. El Android DownloadManager
luego activa el indicador STATUS_PAUSED
. Y, la próxima vez que reinicie el dispositivo, el servicio del sistema se ejecutará automáticamente, verificará si STATUS_PAUSED luego comienza a descargarse nuevamente.
Respuesta: hasta que ocurra un error (en el lado del cliente, conexión o en el servidor) o no ha terminado de descargar el archivo (significa hasta STATUS_SUCCESSFUL
), sigue obteniendo el estado del DownloadManager
Android. No se puede obtener el estado cuando ocurre STATUS_FAILED
: indica que la descarga no se reintentará ( enlace ).
¿Cómo ocurre STATUS_FAILED
? El servicio DownloadManager
cliente detecta el código de estado HTTP 4XX (el cliente adivina que el cliente está errado) y 5XX (el servidor detecta que el servidor está errado) ( enlace ), ahora STATUS_FAILED
convierte en verdadero.
Algunas otras situaciones: cuando los clientes se mantienen apagados y en función de la lógica del servidor, el servidor puede finalizar la conexión con el tiempo de espera excedido. Por lo tanto, este control se basa explícitamente en diferentes servidores HTTP. No podemos pedir estos muchos días aquí. No conocemos la lógica del lado del servidor. Los códigos de estado se basan en el servidor. Cuando el servidor decide que el cliente ha fallado, el servidor STATUS_FAILED
la conexión y hace que STATUS_FAILED
activo en el servidor. los clientes deben estar preparados para que las conexiones TCP desaparezcan en momentos arbitrarios y deben poder restablecer la conexión y volver a intentar la solicitud HTTP. Una conexión prematuramente cerrada no debe tratarse como un error; un error solo se señalará si falla el intento de restablecer la conexión. Tu pregunta no tiene una respuesta exacta.
Nota : las TCP connections to disappear at arbitrary times
( enlace ) es la lógica principal aquí que puede reanudar su conexión después de un cierto número de días de su dispositivo apagado.
1) En STATUS_FAILED
, no puede continuar el seguimiento de más datos.
2) Encendido Si COLUMN_STATUS
no está STATUS_FAILED
ni STATUS_PAUSED
, el valor de esta columna no está definido, es posible que aquí no pueda rastrear más datos.
- Cualquier cosa que no sea en las dos condiciones anteriores, la descarga está en progreso.