带有cookie身份验证的DownloadManager

时间:2013-04-05 22:32:51

标签: android android-download-manager download-manager

我正在尝试使用DownloadManager从我的服务器解析带有JSESSIONID的cookie来获取zip文件。我正在使用这个JSESSIONID使用HTTPCLIENT lib进行所有进程登录,并设置变量JSESSIONID以供稍后在我的DownloadManager请求中使用。

我的下载请求:

    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(htmlUrlDownload));

    request.addRequestHeader("Cookie", "JSESSIONID=" + JSESSIONID);
    request.addRequestHeader(Constants.USER_AGENT, Constants.TARGET_REQUEST_HEADER);

    request.setDescription("Baixando " + metaDado.getType());
    request.setTitle("Download");
    request.allowScanningByMediaScanner();
    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);

    String nameFile = offlineUuid + ".zip";

    fileName = nameFile;

    filePath = Environment.getExternalStorageDirectory() + File.separator + Environment.DIRECTORY_DOWNLOADS
            + File.separator + fileName;

    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, nameFile);

    final DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);

    final long downloadId = manager.enqueue(request);

问题是下载永远不会开始,而COLUMN_REASON会将代码返回到ERROR_UNHANDLED_HTTP_CODE

但是,如果我尝试使用Dropbox链接下载相同的文件而不使用身份验证或使用httpclient,那么它的工作正常,我做错了什么?

如何获得更好的消息错误?

1 个答案:

答案 0 :(得分:5)

您的代码没有任何问题,似乎您的服务器正在使用HTTP重定向状态代码进行响应,这导致DownloadManager无法处理下载。

来自Android文档: -

  

public static final int ERROR_UNHANDLED_HTTP_CODE

     

在API级别9中添加了当HTTP代码为时COLUMN_REASON的值   收到下载管理员无法处理。

见下面的代码片段: -

来自Android Framework源代码DownloadManger.java

case Downloads.Impl.STATUS_UNHANDLED_HTTP_CODE:
                case Downloads.Impl.STATUS_UNHANDLED_REDIRECT:
                    return ERROR_UNHANDLED_HTTP_CODE;

因此,您需要检查服务器日志中是否存在此问题,或者将直接文件网址传递给下载管理器,该管理器不会导致任何重定向。

另请注意,Androidmanifest.xml中需要以下两个权限才能下载以按预期工作

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>