我尝试使用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)
那么,请求状态始终处于待处理状态的可能原因是什么?我该如何调试呢?
任何帮助将不胜感激。
答案 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();
}