Android分段下载

时间:2012-09-09 08:47:47

标签: android download segment

我还是Android的新手,所以,我还不熟悉它的库和API。

我的第一个主要项目是下载管理器,它支持分段下载。我已经可以下载文件,但是,我仍然不知道如何或从哪里开始分段下载。

我已经浏览了很多主题,但我真的找不到任何关于Android中分段下载的文章或主题。

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

此主题应该可以帮助您:link

我们的想法是在您的请求标题中使用Content-Range关键字(您联系的服务器必须能够管理它)

示例代码,您可以从中获取灵感:

public String readFirstChunk(String urlString, int byteCount) {
    String text = null;
    if (urlString != null) {
        org.restlet.Client restletClient = new org.restlet.Client(Protocol.HTTP);
        Request request = new Request(Method.GET, urlString);
        List<Range> ranges = Collections.singletonList(new Range(0, byteCount));
        request.setRanges(ranges);
        Response response = restletClient.handle(request);
        if (Status.SUCCESS_OK.equals(response.getStatus())) {
            text = processSuccessfulChunkRequest(response);
        } else if (Status.SUCCESS_PARTIAL_CONTENT .equals(response.getStatus())) {
            text = processSuccessfulChunkRequest(response);
        } else {
            System.err.println("FAILED "+response.getStatus());
        }
    }
    return text;
}

private String processSuccessfulChunkRequest(Response response) {
    String text = null;
    try {
        text = response.getEntity().getText();
    } catch (IOException e) {
        throw new RuntimeException("Cannot download chunk", e);
    }
    return text;
}

答案 1 :(得分:0)

您应该研究Accept-Ranges标题以及Android中的HttpClient类。

分段下载仅涉及通过使用HttpClient的请求在Accept-Ranges标头中发送不同的值,接收部分内容,然后将所有接收的内容合并到一个文件中。