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

Estoy utilizando 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 ID único devuelto. También me registro para ACTION_DOWNLOAD_COMPLETE

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

Y en el método onReceive () de OnDownloadComplete BroadcastReceiver, estoy recibiendo Id de descarga como

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

Después de que estoy consultando el gestor de descargas para descargar el estado

 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 (significa que el método onReceive se llama dos veces), una vez con el estado de DownloadManager.STATUS_SUCCESSFUL y una vez con el estado de DownloadManager.STATUS_FAILED para el mismo dwnId. Estoy emitir solicitud para descargar unos 10 archivos a la vez y pero en el gestor de descarga de dispositivos que está mostrando el recuento de descarga como algunos 12 o 13 en la barra de notificación superior izquierda significa. Creo que el gestor de descargas tiene algún problema en la descarga de archivos y se reanuda o se reinicia automáticamente para descargar el mismo archivo de nuevo. Es por eso que hay una diferencia entre el recuento de archivos que pedí descargar y el número real en la cola de descarga. Debido a esto solo estoy recibiendo la misma acción completa de DownloadId dos veces. Si esto es cierto, cómo restringirlo. ¿Me equivoco cuál podría ser la razón de la diferencia de cuenta entre lo que pedí a la descarga real? ¿Por qué el receptor de difusión recibe la misma Id de descarga dos veces. ¿Puede alguien por favor hágamelo saber?

Gracias por adelantado…

Se trata de un error informado: http://code.google.com/p/android/issues/detail?id=18462

La manera alrededor encontré es comprobar si la transferencia directa era un éxito, si no zanja la intención o vuelve a hacer cola el archivo si nunca fue transferido …

Perdió un par de horas pensando que uno 🙁

** Editar: añadir 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 ver el código completo, consulte: https://github.com/flegare/JAV387_LaboWidget/blob/master/src/com/mobidroid/widgetfact/service/FactService.java

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.