在我的应用的下一步,我需要添加下载功能。用户选择他们想要下载的内容,如果他们能够费心选择那么多文件的话,他们可以选择任何东西,从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字符串。
在安卓的下载管理器中是做不到的。参见下载管理器问题我有一个类似的需求,我最终使用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;
}