在Android的DownloadManager中设置请求正文?

时间:2012-05-24 17:27:44

标签: android download-manager

对于我的应用程序的下一步,我需要添加下载功能。用户选择他们想要下载的内容,并且可以选择从1个文件到数千个文件中的任何内容,如果他们可能会选择那么多。

我想使用Android内置的DownloadManager来提供这种下载功能,但遗憾的是我无法看到如何为我的场景实现它。

为了让目标服务器授权下载,我需要在请求体中发送一些JSON。像这样,如果我是手动完成的话:

DataOutputStream output = new DataOutputStream(connection.getOutputStream());
output.writeBytes(rawData);
output.flush();

rawData是JSON字符串。请求正文始终设置为POST

我似乎无法找到将此JSON字符串添加到DownloadManager的任何方法,直到我能够这样做,服务器将始终拒绝下载。

我能想到的唯一其他解决方案,我非常想避免,是在我的服务器上编写PHP脚本以获取一些GET参数,生成JSON然后重定向请求。

有人知道我可以将我的JSON数据与DownloadManager一起发送的方式吗?我正在下载的每个文件都需要自己唯一的JSON字符串。

1 个答案:

答案 0 :(得分:1)

您无法在Android的下载管理器see Download Manager Issue中执行此操作, 我有类似的要求,最终使用了HttpClient(Xamarin)。

示例代码-

using(var httpClient = new HttpClient()) {
  using(var request = new HttpRequestMessage(new HttpMethod("POST"), URL)) {
   request.Headers.TryAddWithoutValidation("User-Agent", userAgent);
   request.Headers.TryAddWithoutValidation("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
   request.Headers.TryAddWithoutValidation("Accept-Language", "en-US,en;q=0.5");
   request.Headers.TryAddWithoutValidation("Connection", "keep-alive");
   request.Headers.TryAddWithoutValidation("Referer",RefererURL);
   request.Content = new StringContent("YOUR_REQUEST_BODY_HERE");
   request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded");

   var responser = await httpClient.SendAsync(request);
   return responser;
  }