gpt4 book ai didi

android - 用于在 android 中取消下载的广播接收器

转载 作者:行者123 更新时间:2023-11-29 01:14:34 25 4
gpt4 key购买 nike

我构建了一个应用程序,它使用 DownloadManager 从链接下载文件并在下载时显示进度轮。下载完成后,我发送广播接收器将进度轮更改为已下载图标。

现在面临一个问题,如果我从通知托盘取消下载,我不会收到任何广播,所以进度轮不会停止。

谁能知道我怎样才能取消下载广播?

最佳答案

要获取下载过程的事件,您需要将 downloadManager 注册到广播接收器。

    IntentFilter filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
mContext.registerReceiver(downloadReceiver, filter);

在这里,广播接收器是:

   private BroadcastReceiver downloadReceiver = new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {
checkDownloadStatus(intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1));
}
};

因此当下载取消或成功下载或任何错误时,您将获得状态。即使您取消通知。您可以通过以下方式检查状态:

    private void checkDownloadStatus(long downloadReference) {
DownloadManager.Query myDownloadQuery = new DownloadManager.Query();
myDownloadQuery.setFilterById(downloadReference);

//向下载管理器查询已请求的下载。 游标 cursor = downloadManager.query(myDownloadQuery); 如果 (cursor.moveToFirst()) {

        //column for status
int columnIndex = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS);
int status = cursor.getInt(columnIndex);
//column for reason code if the download failed or paused
int columnReason = cursor.getColumnIndex(DownloadManager.COLUMN_REASON);
int reason = cursor.getInt(columnReason);
//get the download filename

String statusText = "";
String reasonText = "";

switch (status) {
case DownloadManager.STATUS_FAILED:
statusText = "STATUS_FAILED";
switch (reason) {
case DownloadManager.ERROR_CANNOT_RESUME:
reasonText = "ERROR_CANNOT_RESUME";
break;
case DownloadManager.ERROR_DEVICE_NOT_FOUND:
reasonText = "ERROR_DEVICE_NOT_FOUND";
break;
case DownloadManager.ERROR_FILE_ALREADY_EXISTS:
reasonText = "ERROR_FILE_ALREADY_EXISTS";
break;
case DownloadManager.ERROR_FILE_ERROR:
reasonText = "ERROR_FILE_ERROR";
break;
case DownloadManager.ERROR_HTTP_DATA_ERROR:
reasonText = "ERROR_HTTP_DATA_ERROR";
break;
case DownloadManager.ERROR_INSUFFICIENT_SPACE:
reasonText = "ERROR_INSUFFICIENT_SPACE";
break;
case DownloadManager.ERROR_TOO_MANY_REDIRECTS:
reasonText = "ERROR_TOO_MANY_REDIRECTS";
break;
case DownloadManager.ERROR_UNHANDLED_HTTP_CODE:
reasonText = "ERROR_UNHANDLED_HTTP_CODE";
break;
case DownloadManager.ERROR_UNKNOWN:
reasonText = "ERROR_UNKNOWN";
break;
}
break;
case DownloadManager.STATUS_PAUSED:
statusText = "STATUS_PAUSED";
switch (reason) {
case DownloadManager.PAUSED_QUEUED_FOR_WIFI:
reasonText = "PAUSED_QUEUED_FOR_WIFI";
break;
case DownloadManager.PAUSED_UNKNOWN:
reasonText = "PAUSED_UNKNOWN";
break;
case DownloadManager.PAUSED_WAITING_FOR_NETWORK:
reasonText = "PAUSED_WAITING_FOR_NETWORK";
break;
case DownloadManager.PAUSED_WAITING_TO_RETRY:
reasonText = "PAUSED_WAITING_TO_RETRY";
break;
}
break;
case DownloadManager.STATUS_PENDING:
statusText = "STATUS_PENDING";
break;
case DownloadManager.STATUS_RUNNING:
statusText = "STATUS_RUNNING";
break;
case DownloadManager.STATUS_SUCCESSFUL:
statusText = "STATUS_SUCCESSFUL";

break;
}

}

}

出错时,您可以停止进度条。

关于android - 用于在 android 中取消下载的广播接收器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40692939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com