2013-01-21 4 views
5

Ich lade ein Bild von meinem Server mit der Download Manager.Android: DownloadManager - Benachrichtigung Sticking

Es lädt die Datei fein und legt es dort hin, wo ich es will. Aber aus irgendeinem Grund die Benachrichtigung klebt und ich kann nicht scheinen es zu entfernen. Der Code für den Download-Manager ist wie folgt:

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(); 
    } 
}; 

Wie entferne ich die Benachrichtigung, sobald es heruntergeladen wurde?.

Ich habe versucht, die verschiedenen Benachrichtigungs Sichtbarkeit Modi ohne Glück einzustellen. Kann ich etwas aus dem BroadcastReceiver machen, wenn er fertig ist?

Antwort

8

Ich habe es geschafft, mein Problem zu lösen. In der BroadcastReceiver musste ich die Download-ID von der Absicht abrufen und diese aus der DownloadManager entfernen.

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); 
    } 
}; 

Ich möchte auch darauf hinweisen, dass mDownloadManager.remove(download_id) indem diese die Datei aus dem Speicher gelöscht werden. Ich musste zusätzlichen Code hinzufügen, um die Datei dauerhaft an dem Ort zu speichern, den ich ursprünglich speichern wollte.

+2

Bitte verwenden Sie DownloadManager.EXTRA_DOWNLOAD_ID anstelle von Hardcoding "extra_download_id" –

+0

Keine andere Lösung? Ich meine, dass es nicht sehr sauber ist, die Benachrichtigung zu löschen, indem die heruntergeladene Datei entfernt wird (und Sie müssen sie zuerst speichern): Dateikopie und Dateilöschung für nur eine Benachrichtigung löschen! – Christian