DownloadManager中如何取消下载

11
我将尝试使用以下代码从URL下载图片:
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);
}

我不知道如何在下载开始后取消它。
1个回答

12

使用enqueue方法来获取ID,示例如下:

long downloadID = downloadManager.enqueue(request);

然后使用remove方法并将downloadID传递给它。

downloadManager.remove(downloadID);

当我尝试这样做时,它会给我一个"java.lang.RuntimeException: An error occurred while executing doInBackground()"错误,位于long downloadID = downloadManager.enqueue(request);。 - Abhriya Roy
@AbhriyaRoy,我不明白为什么你需要在AsyncTask下使用enqueue方法,我认为错误就是从那里出现的。如果你真的需要这个,你可以通过以下两种方式解决:1.将一个Activity传递给AsyncTask的构造函数,然后你可以使用Activity.runOnUiThread;2.你可以使用new Handler(Looper.getMainLooper).pose(Runnable...) - user8690908

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接