Android – DownloadManager – Borrar descargas antiguas en cola
Estoy construyendo una aplicación que necesita saber por razones de concurrencia si todas las descargas están terminadas. Una determinada función sólo se permite iniciar cuando todas mis descargas están terminadas.
Me las arreglé para escribir una función que comprueba la cola de descargas de edad:
- Android Studio dice que "la variable local es redundante"
- Android studio 1.1 - cambiar JRE utilizado para ejecutar el estudio
- Formato Flotación a n decimales
- Cómo verificar si existe un valor en HashMap
- Implementación de Getextra () y Putextra
DownloadManager dm = (DownloadManager) context.getSystemService(context.DOWNLOAD_SERVICE); Query q = new Query(); q.setFilterByStatus(DownloadManager.STATUS_FAILED|DownloadManager.STATUS_PENDING|DownloadManager.STATUS_RUNNING); Cursor c = dm.query(q);
El problema es que – sólo para estar seguro – en la inicialización quiero limpiar la cola y eliminar todas las entradas.
¿Alguna idea de cómo puedo ahora eliminar las entradas?
Esta función no funcionó para mí porque no quiero eliminar físicamente los archivos … sólo vacía la cola.
¿Algunas ideas?
- OnBackStackChanged () se llama dos veces cuando se agrega nuevo fragmento en backstack
- Android obtiene la fecha antes de 7 días (una semana)
- Libstreaming: utilice VLC como cliente RTSP
- Pasar parámetros con HttpURLConnection
- MotionEvent.ACTION_UP no funciona
- KSoap2 y KvmSerializable-Envía el objeto de clase con un campo de lista a webservice en java android
- Retrofit call dentro de AsyncTask
- No ejecuta la primera actividad
¿Puedes esperar a que DownloadManager termine solo tus descargas? Para lograr esto, puede guardar las manejadas de sus descargas con algo como esto:
List<Long> downloadIds = new ArrayList<>(); downloadIds.add(downloadManager.enqueue(request));
A continuación, puede consultar el downloadManager de esta manera:
Query q = new Query(); long[] ids = new long[downloadIds.size()]; int i = 0; for (Long id: downloadIds) ids[i++] = id; q.setFilterById(ids); Cursor c = downloadManager.query(q); Set<Long> res = new HashSet<>(); int columnStatus = c.getColumnIndex(DownloadManager.COLUMN_STATUS); while (c.moveToNext()) { int status = c.getInt(columnStatus); if (status != DownloadManager.STATUS_FAILED && status != DownloadManager.STATUS_SUCCESSFUL) { // There is at least one download in progress } } c.close();
Tenga en cuenta que esto puede funcionar si usted está interesado sólo en sus propias descargas, no todas las descargas posibles que pueden ocurrir en todo el sistema.
Espero que esto ayude.
Si no desea eliminar físicamente los archivos, puede hacer una copia de seguridad antes de llamar a la función de eliminación de DownloadManager. No es una solución elegante pero no puedo encontrar ninguna otra manera