uptodown udidfaker play para gestor descargas descargar android download broadcastreceiver broadcast download-manager

udidfaker - DownloadManager.ACTION_DOWNLOAD_COMPLETE receptor de difusión que recibe el mismo ID de descarga más de una vez con diferentes estados de descarga en Android



gestor de descargas android apk (1)

Estoy usando Android DownloadManger System Service para descargar algunos archivos de la siguiente manera

dwnId = mgr.enqueue(new DownloadManager.Request(serveruri) .setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE) .setAllowedOverRoaming(false) .setTitle(getAlbumName()) .setDescription(getTrackName()) .setDestinationUri(deviceUri) .setShowRunningNotification(true));

donde mgr es la instancia de Download Manager, dwnId es una ID única devuelta. También me estoy registrando para ACTION_DOWNLOAD_COMPLETE

registerReceiver(onDownloadComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));

y en el método onReceive () onDownloadComplete BroadcastReceiver estoy obteniendo Id de descarga como

Long dwnId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0);

Después de eso, consulto el Administrador de descarga para conocer el estado de descarga

Cursor c = downloadManager.query(new DownloadManager.Query().setFilterById(dwnId)); c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));

para las constantes DownloadManager.STATUS_ *.

El problema es que estoy recibiendo el mismo downId dos veces (el método "media onReceive" se llama dos veces), una vez con el estado DownloadManager.STATUS_SUCCESSFUL y una con el estado DownloadManager.STATUS_FAILED para el mismo dwnId. Estoy emitiendo una solicitud para descargar unos 10 archivos a la vez pero, en el administrador de descargas del dispositivo, se muestra el conteo de descargas como 12 o 13 en la barra de notificaciones superior izquierda. Creo que el administrador de descargas tiene algún problema para descargar archivos y se reanudó o reinició automáticamente para descargar el mismo archivo nuevamente. Es por eso que hay una diferencia entre el número de archivos que solicité descargar y el número real en la cola de descarga. Debido a esto, solo estoy obteniendo la misma acción completa de DownloadId dos veces. Si esto es cierto, cómo restringirlo. ¿Me equivoco cuál podría ser el motivo de la diferencia de conteo entre lo que solicité y la descarga real? ¿Por qué el receptor de difusión recibe la misma Id de descarga dos veces? ¿Alguien puede decirmelo?

Gracias por adelantado...


Este es un error reportado, vea: http://code.google.com/p/android/issues/detail?id=18462

El camino que encontré es verificar si la descarga fue un éxito, si no, abandonar el intento o volver a poner en cola el archivo si nunca fue descargado ...

Perdí un par de horas pensando en eso :(

** Editar: agregar ejemplo de código **

/** * Check if download was valid, see issue * http://code.google.com/p/android/issues/detail?id=18462 * @param long1 * @return */ private boolean validDownload(long downloadId) { Log.d(TAG,"Checking download status for id: " + downloadId); //Verify if download is a success Cursor c= dMgr.query(new DownloadManager.Query().setFilterById(downloadId)); if(c.moveToFirst()){ int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS)); if(status == DownloadManager.STATUS_SUCCESSFUL){ return true; //Download is valid, celebrate }else{ int reason = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_REASON)); Log.d(TAG, "Download not correct, status [" + status + "] reason [" + reason + "]"); return false; } } return false; }

Para obtener el código completo, consulte: https://github.com/flegare/JAV387_LaboWidget/blob/master/src/com/mobidroid/widgetfact/service/FactService.java