android - samsung - ¿Es posible cancelar/detener una descarga iniciada utilizando DownloadManager?
eliminar descarga en curso (1)
Puede cancelar descargas a través de DownloadManager
llamando a su método de remove(long...)
. Para esto necesitas el ID de la descarga. Desde mi experiencia, básicamente hay dos formas confiables de cómo obtenerlo:
- Recuerde el valor de retorno del método
enqueue(DownloadManager.Request)
. - Consulte el
DownloadManager
para descargas a través del método dequery(DownloadManager.Query)
. Luego recupere los ID delCursor
devuelto, se almacenan en la columna denominadaDownloadManager.COLUMN_ID
.
Receptor de radiodifusión
Desde mi experiencia, no es confiable recuperar la ID de descarga a través de BroadcastReceiver
para la acción android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED
(aunque la transmisión siempre se envía).
- Obteniendo IDs de descarga desde
DownloadManager. EXTRA_NOTIFICATION_CLICK_DOWNLOAD_IDS
extraDownloadManager. EXTRA_NOTIFICATION_CLICK_DOWNLOAD_IDS
DownloadManager. EXTRA_NOTIFICATION_CLICK_DOWNLOAD_IDS
no funciona correctamente. En algunos dispositivos, siempre devuelve nulo. Si devuelve algo en algunos dispositivos, es el ID de la descarga que se inició primero. Y si la primera descarga se termina / cancela, devuelve un nulo para la notificación de las descargas restantes. - Obtener un valor extra de
DownloadManager.EXTRA_DOWNLOAD_ID
no funciona para esta acción.
Obtener ID en transmisión para la acción android.intent.action.DOWNLOAD_COMPLETE
parece confiable. Tienes que obtenerlo desde DownloadManager.EXTRA_DOWNLOAD_ID
adicional. Tenga en cuenta que la transmisión no solo se envía para que se complete la descarga, sino que también se envía cuando cancela la llamada de llamada remove()
.
Nota: las descargas a veces se agrupan en una notificación, a veces crean múltiples notificaciones. No pude averiguar las condiciones cuando las notificaciones se agrupan o no. Parece depender de muchos factores, como la versión del sistema operativo, el dispositivo, el título de la descarga, ... y en general parece bastante impredecible.
Nota: He probado si puedes cancelar la descarga de otra aplicación y no lo parece. A pesar de que las ID son ID de base de datos que son únicas en todas las aplicaciones. Al llamar a remove()
no se cancela la descarga de otra aplicación.
Estoy usando DownloadManager para descargar un montón de archivos en mi aplicación. No puedo averiguar cómo cancelar las descargas que ha sido puesto en cola por downloadManager.
Hay dos posibilidades: a. El usuario puede cancelarlo manualmente si hace clic en la barra de notificaciones. segundo. Cancele y elimine la descarga mediante código.
Tengo el siguiente receptor definido.
<receiver
android:name=".DownloadStatusReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
<action android:name="android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED" />
</intent-filter>
</receiver>
Y en el receptor
if (DownloadManager.ACTION_NOTIFICATION_CLICKED.equals(action)) {
Constants.showLog(TAG, "Notification clicked");
long downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0);
DownloadManager dm =(DownloadManager)context.getSystemService(Context.DOWNLOAD_SERVICE);
dm.remove(downloadId);
}
¿Alguna idea?