29

estoy usando Android System Service DownloadManger para la descarga de algunos archivos en el siguiente maneraDownloadManager.ACTION_DOWNLOAD_COMPLETE emisión receptor que recibe el mismo id descarga más de una vez con diferentes estados de descarga en Android

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 descargar el gestor de instancias, dwnId es ID único devuelto. También estoy registrando para ACTION_DOWNLOAD_COMPLETE

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

y en OnReceive del onDownloadComplete BroadcastReceiver() método que estoy recibiendo Id de descargas como

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

Después de que yo estoy consultando Administrador de descargas de Estado de la 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 (significa que el método 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 ...

Respuesta

33

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

La forma de evitar que he encontrado es para verificar si la descarga fue un éxito, si no deshacerse de la intención o re-cola el archivo si no se descargó ...

perdió un par de horas pensando que uno :(

** Edición: añadiendo 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 código completo, véase: https://github.com/flegare/JAV387_LaboWidget/blob/master/src/com/mobidroid/widgetfact/service/FactService.java

+0

Thx por u r esfuerzos – vrs

+0

¿Le importaría compartir código? –

+3

@GaurawYadav Le importó Creo: p como él no compartió el código :) –

Cuestiones relacionadas