11

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

我想使用 Android 的内置 DownloadManager 来提供此下载功能,但不幸的是我看不到如何为我的场景实现它。

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

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

rawDataJSON 字符串在哪里。请求正文始终设置为POST.

我似乎找不到任何方法将此 JSON 字符串添加到 DownloadManager,并且在我能做到之前,服务器将始终拒绝下载。

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

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

4

1 回答 1

0

您不能在 Android 的下载管理器中执行此操作,请参阅下载管理器问题,我有类似的要求,我最终使用了 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;
  }
于 2020-05-28T13:14:30.467 回答