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

标签 android download-manager

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

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

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

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

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

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

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

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

最佳答案

您无法在 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;
  }

关于android - 在 Android 的 DownloadManager 中设置请求正文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10742417/

相关文章:

java - 在 onClick() 内部获取 R.drawable int

java - Android 2.3.4 SSL问题

java - 如何选择要复制的文件?

iOS App被拒绝,如何获得下载全网内容的权限?

Android 下载管理器 ETag 支持

android - 使用 Android 中的下载管理器下载后识别特定文件

android - addOnScrollListener 的位置在滚动后加载新数据时重置为顶部

使用 TOP 和 BOTTOM 重力时 Android DrawerLayout 失败

java - 如何使用 java 启用 Https 下载

video - Youtube 下载器应用程序