2016-09-01 7 views
3

Ich versuche, Bilder von einer URL zum Download mit dem folgenden Code: -Download abbrechen in Download

public static void writeToDisk(Context context, @NonNull String imageUrl, @NonNull String downloadSubfolder) { 
    Uri imageUri = Uri.parse(imageUrl); 
    String fileName = imageUri.getPath(); 
    String downloadSubpath = downloadSubfolder + fileName; 

    DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE); 
    DownloadManager.Request request = new DownloadManager.Request(imageUri); 
    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 
    request.setDescription(imageUrl); 
    request.allowScanningByMediaScanner(); 
    request.setDestinationUri(getDownloadDestination(downloadSubpath)); 

    downloadManager.enqueue(request); 
} 

ich kann nicht herausfinden, wie man den Download abzubrechen, sobald es gestartet wird.

Antwort

4

Verwenden Sie die enqueue Methode bekommen die die ID wie in

long downloadID = downloadManager.enqueue(request); 

Und dann mit dem remove Methode, um die downloadID ihm vorbei.

downloadManager.remove(downloadID); 
+0

, wenn ich versuche, dies zu tun, es gibt mir "java.lang.RuntimeException: Ein Fehler ist aufgetreten, während doInBackground Ausführung()" auf lange DOWNLOADID = downloadManager.enqueue (Anfrage); –

+0

@AbhriyaRoy, ich kann nicht verstehen, warum Sie 'Enqueue' Methode unter AsyncTask verwenden müssen, denke ich, dass der Fehler von dort erscheint. Wenn Sie wirklich brauchen, dass 1. Sie eine 'Aktivität' an den' AsyncTask''s Konstruktor übergeben können, dann können Sie 'Activity.runOnUiThread' verwenden oder 2. Sie können' neue Handler (Looper.getMainLooper) .pose (Runnable. ..) ' – oop