Android下载管理器。状态总是待定

时间:2018-12-20 13:38:00

标签: android android-download-manager

我尝试使用Download Manager从特定的URL下载一些文件, 但是下载请求从未完成。

因此,我记录了一些信息以查看发生了什么问题,结果是请求始终处于待处理状态,而output_shape = [product, shape[-1]] COLUMN_REASON,我在文档中找不到相应的描述

0

这是开始下载的方法。

COLUMN_STATUS: 1
COLUMN_REASON: 0
COLUMN_TOTAL_SIZE_BYTES: -1
COLUMN_BYTES_DOWNLOADED_SO_FAR: 0

并记录调试信息。

val req = DownloadManager.Request(uri).apply {
    addRequestHeader("Cookie", cookie)
    allowScanningByMediaScanner()
    setTitle(fullname)
    setDescription(/* description text */)
    setDestinationInExternalFilesDir(context, Environment.DIRECTORY_DOWNLOADS, fullname)
}
val downloadId = downloadManager.enqueue(req)

那么,请求状态始终处于待处理状态的可能原因是什么?我该如何调试呢?

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

就我而言,设置VPN似乎可以解决此问题。看来Google服务已在我的网络中被阻止,并且在我设置了系统全局VPN之后,问题就消失了。

答案 1 :(得分:1)

DownloadManager将其日志输出到logcat,但不在您的应用程序ID下,因此您需要显示所有应用程序的日志。那里应该有失败下载的线索。例如,这是我的一些失败案例。

D/DownloadManager: [1988] Starting
W/DownloadManager: [1988] Stop requested with status 500: Internal Server Error
D/DownloadManager: [1988] Finished with status WAITING_TO_RETRY

W/DownloadManager: [1988] Stop requested with status 403: Unhandled HTTP response: 403 Forbidden

答案 2 :(得分:0)

您必须等待(延迟)之后再检查状态或每次在计时器中设置下载ID。 入队似乎为时已晚返回下载ID。 我的代码效果很好:

$result = $random_number_1 < $random_number_2? $random_number_1 . ':' . $random_number_2: $random_number_2 . ':' . $random_number_1;

检查状态方法

private void startDownload(View v)
{
    Uri uri=Uri.parse("http://example.com/app/name.apk");
    DownloadManager mgr = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
    DownloadManager.Request req = new DownloadManager.Request(uri)
            .setTitle(title)
            .setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI
                    |DownloadManager.Request.NETWORK_MOBILE)
            .setDescription("downloading")
            .setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,"name.apk");
    downloadId = mgr.enqueue(req);
 

    getDownloadStatus();
}