在Android的DownloadManager中设置请求体?

问题描述 投票:11回答:1

在我的应用的下一步,我需要添加下载功能。用户选择他们想要下载的内容,如果他们能够费心选择那么多文件的话,他们可以选择任何东西,从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字符串。

android download-manager
1个回答
1
投票

在安卓的下载管理器中是做不到的。参见下载管理器问题我有一个类似的需求,我最终使用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;
  }
© www.soinside.com 2019 - 2024. All rights reserved.