2

我正在尝试使用 DownloadManager 下载以下文件:

http://loopstream01.apa.at/?channel=fm4&ua=flash&id=2013-10-05_1902_tl_54_4DDSat1__9778.mp3

代码如下所示:

DownloadManager.Request request = new DownloadManager.Request(Uri.parse(asset.url));
request.setDescription("");
request.setTitle(asset.name);
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "test");
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);

下载管理器始终无法下载文件并显示以下错误消息:

中止下载请求 123:http 错误 206

由于 206 表示部分内容,这始终需要我添加的 http 请求中的范围

 request.addRequestHeader("Range", "bytes=0-1000");

下载前 1000 个字节,但错误消息保持不变并且没有下载任何内容。:(

编辑当我在 Android 4.2 设备上运行相同的代码时,我收到以下消息:

10-09 21:22:41.461:I/DownloadManager(2379):开始下载 231 10-09 21:22:41.692:W/DownloadManager(2379):中止下载请求 231:预期正常,但收到部分 10-09 21:22:41.712:I/DownloadManager(2379):下载 231 完成,状态为 CANNOT_RESUME

4

1 回答 1

2

如果 android 下载管理器认为它正在恢复较早的下载,它似乎会处理 206 恢复响应。否则它将假定响应无效。通过 addRequestHeader 插入的显式范围请求将不起作用。

这是 4.3.1 的下载线程代码: https://android.googlesource.com/platform/packages/providers/DownloadProvider.git/+/android-4.3.1_r1/src/com/android/providers/downloads/DownloadThread。爪哇

于 2013-10-21T13:28:21.423 回答