【问题标题】:Android DownloadManager double request & request abortAndroid DownloadManager 双重请求和请求中止
【发布时间】:2013-01-22 22:40:15
【问题描述】:

我正在尝试使下载管理器请求正常工作,但遇到了一个奇怪的错误。代码如下:

package com.vsnetworks.vswebkads;

import java.io.File;
import android.net.Uri;
import android.os.Bundle;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.DownloadManager;
import android.app.DownloadManager.Request;
import android.content.Context;
import android.util.Log;

@TargetApi(9)
public class MainActivity extends Activity {

static final String DL_STR = "downloads";

@Override                                                                            
public void onCreate(Bundle savedInstanceState) {

    Log.v("VERS TEST", "1.1");
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    File externalDir = getExternalFilesDir(null);
    externalDir.mkdirs();

    File dlDir = new File(externalDir, MainActivity.DL_STR);
    if (!dlDir.exists())
        dlDir.mkdirs();

    DownloadManager dlManager = (DownloadManager) getApplicationContext().getSystemService(Context.DOWNLOAD_SERVICE);
    Uri uri = Uri.parse("https://www.google.com/images/srpr/logo3w.png");
    //uri = Uri.parse("http://download.thinkbroadband.com/20MB.zip");
    DownloadManager.Request request = new Request(uri);
    request.setAllowedNetworkTypes(Request.NETWORK_WIFI);
    request.setDestinationInExternalFilesDir(getApplicationContext(), null, "downloads/test.png");
    request.setTitle("test");
    dlManager.enqueue(request);
}
}

有趣的是,如果我取消注释第二个 uri = 行,下载效果很好,并且文件最终在目录中。这让我认为是我试图通过 SSL 下载导致问题。但是,根据这两个线程,下载管理器支持 ssl(第一个在 cmets 中):

Android DownloadManager and SSL (https)

android2.3 DownloadManager

我似乎也没有收到任何错误,告诉我下载管理器只能与第二个链接中的 http 一起使用。这是我看到的错误:

01-22 17:23:42.385: I/DownloadManager(1061): Initiating request for download 4068
01-22 17:23:42.905: I/DownloadManager(1061): Initiating request for download 4068
01-22 17:23:42.905: W/DownloadManager(1061): Aborting request for download 4068: Trying to resume a download that can't be resumed
01-22 17:23:42.905: D/DownloadManager(1061): setupDestinationFile() unable to resume download, deleting /storage/sdcard0/Android/data/com.vsnetworks.vswebkads/files/downloads/test.png
01-22 17:23:42.915: D/DownloadManager(1061): cleanupDestination() deleting /storage/sdcard0/Android/data/com.vsnetworks.vswebkads/files/downloads/test.png

我今天刚刚在平板电脑上更新了 android,它的版本是 4.1.1,所以我认为这不是版本问题。

那么,我可以使用 https 进行下载管理器请求吗?如果可以,这是正确的方法吗?

【问题讨论】:

  • 我遇到了同样的错误。如果您发现与此相关的任何内容,请告诉我。谢谢你

标签: android android-download-manager


【解决方案1】:

在这种情况下,错误似乎与设备有关。当我们将测试切换到 nexus 10 时,代码可以正常工作,并且没有出现此错误。

【讨论】:

    【解决方案2】:

    检查您的服务器日志,有时 DownloadManager 会启动部分下载请求(这会导致误导性的双日志输出“Initiating request for download”。您的服务器必须正确处理此请求,否则您会收到此错误。请参阅我的回答这个问题: Can't resume download

    【讨论】:

    • 您好,谢谢您的回答。这实际上并没有连接到我们自己的服务器,它只是对通用文件的基本访问。我想这并不意味着你的答案是错误的,也许两个测试用例站点之一确实处理了它,而另一个没有。无论如何,我们早就推出了自己的下载管理器,以获取原生 android 无法使用的功能。
    • 没有理由拒绝我的回答。关于 stackoverflow 常见问题解答,如果“您遇到一个非常草率、不费吹灰之力的帖子,或者一个明显不正确且可能非常不正确的答案”,您应该使用 downvote。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多