package com.android.volley.toolbox; import java.io.File; import java.util.HashMap; import java.util.Map; import com.android.volley.AuthFailureError; import com.android.volley.DefaultRetryPolicy; import com.android.volley.Response.ErrorListener; import com.android.volley.Response.Listener; import com.android.volley.Response.LoadingListener; public class DownloadRequest extends StringRequest { public DownloadRequest(String url, Listener<String> listener, ErrorListener errorListener, LoadingListener loadingListener) { super(Method.GET, url, listener, errorListener, loadingListener); // 下载文件大,失败可能性比较大,所以加大retry次数 setRetryPolicy( new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS, 5, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); // 关闭gzip setShouldGzip(false); } private String target; private boolean isResume; public String getTarget() { return target; } public void setTarget(String target) { this.target = target; } public boolean isResume() { return isResume; } public void setResume(boolean isResume) { this.isResume = isResume; } @Override public Map<String, String> getHeaders() throws AuthFailureError { File file = new File(target); final long fileLen = file.length(); if (isResume && fileLen > 0) { Map<String, String> headers = new HashMap<String, String>(); headers.put("Range", "bytes="+fileLen+"-"); return headers; } return super.getHeaders(); } /** * 停止下载 * stopDownload * @since 3.5 */ public void stopDownload() { cancel(); } }