2013-01-21 17 views
5

Sto scaricando un'immagine dal mio server utilizzando Download Manager.Android: DownloadManager - Notifica che attacca

Scarica il file e lo mette dove lo voglio. Ma per qualche motivo la notifica si blocca e io non riesco a rimuovere lo. Il codice per il download manager è la seguente:

mDownloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); 
registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); 

Uri uri = Uri.parse("URL")); 

long enqueue = mDownloadManager.enqueue(new DownloadManager.Request(uri) 
      .setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI) 
      .setAllowedOverRoaming(false) 
      .setTitle("Title") 
      .setDescription("File description") 
      .setDestinationInExternalPublicDir("Folder", "Filename") 
      .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE)); 

BroadcastReceiver onComplete = new BroadcastReceiver() { 
    public void onReceive(Context ctxt, Intent intent) { 
     Toast.makeText(getApplicationContext(), "Download Completed", Toast.LENGTH_SHORT).show(); 
    } 
}; 

Come posso rimuovere la funzionalità di notifica una volta che è stato scaricato?.

Ho provato a impostare tutte le diverse modalità di visibilità delle notifiche senza fortuna. C'è qualcosa che posso fare da BroadcastReceiver una volta che è finito?

risposta

8

Sono riuscito a risolvere il mio problema. Nel numero BroadcastReceiver ho dovuto ottenere l'ID download dall'intento e rimuoverlo dallo DownloadManager.

BroadcastReceiver onComplete = new BroadcastReceiver() { 
    public void onReceive(Context ctxt, Intent intent) { 
     Toast.makeText(getApplicationContext(), "Download Completed", Toast.LENGTH_SHORT).show(); 

     // Get the download_id of the completed download. 
     long download_id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1); 

     // Remove the completed download from the DownloadManager 
     mDownloadManager.remove(download_id); 
    } 
}; 

voglio anche notare che facendo mDownloadManager.remove(download_id), questo sarà eliminare il file dalla memoria. Ho dovuto aggiungere altro codice per salvare il file in modo permanente nella posizione che volevo che salvasse in origine.

+2

Si prega di utilizzare DownloadManager.EXTRA_DOWNLOAD_ID invece di hardcoding "extra_download_id" –

+0

Nessuna altra soluzione? Intendo dire che non è molto pulito cancellare la notifica rimuovendo il file scaricato (e devi prima salvarlo): copia dei file e cancellazione dei file solo per una notifica chiara! – Christian

Problemi correlati