diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 6684a7a..6a18084 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,12 +2,12 @@ apply plugin: 'com.android.application'
android {
compileSdkVersion 23
- buildToolsVersion "22.0.1"
+ buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.aspsine.multithreaddownload"
minSdkVersion 11
- targetSdkVersion 22
+ targetSdkVersion 23
versionCode 1
versionName "1.0"
}
@@ -33,9 +33,9 @@ android {
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
- compile 'com.android.support:appcompat-v7:23.0.0'
- compile 'com.android.support:recyclerview-v7:23.0.0'
- compile 'com.android.support:cardview-v7:23.0.0'
+ compile 'com.android.support:appcompat-v7:23.1.1'
+ compile 'com.android.support:recyclerview-v7:23.1.1'
+ compile 'com.android.support:cardview-v7:23.1.1'
compile 'com.jakewharton:butterknife:7.0.1'
compile 'com.squareup.picasso:picasso:2.5.2'
compile project(':library')
diff --git a/app/src/main/java/com/aspsine/multithreaddownload/demo/DataSource.java b/app/src/main/java/com/aspsine/multithreaddownload/demo/DataSource.java
index 1b4a9f6..098edd5 100644
--- a/app/src/main/java/com/aspsine/multithreaddownload/demo/DataSource.java
+++ b/app/src/main/java/com/aspsine/multithreaddownload/demo/DataSource.java
@@ -24,7 +24,9 @@ public class DataSource {
"微信电话本",
"淘宝",
"聚美优品",
- "搜房网"
+ "搜房网",
+ "teste quickblox",
+ "teste quickblox video"
};
private static final String[] IMAGES = {
@@ -38,7 +40,9 @@ public class DataSource {
"http://img.wdjimg.com/mms/icon/v1/b/fe/718d7c213ce633fd4e25c278c19acfeb_512_512.png",
"http://img.wdjimg.com/mms/icon/v1/f/29/cf90d1294ac84da3b49561a6f304029f_512_512.png",
"http://img.wdjimg.com/mms/icon/v1/4/43/0318ce32731600bfa66cbb5018e1a434_512_512.png",
- "http://img.wdjimg.com/mms/icon/v1/7/08/2b3858e31efdee8a7f28b06bdb83a087_512_512.png"
+ "http://img.wdjimg.com/mms/icon/v1/7/08/2b3858e31efdee8a7f28b06bdb83a087_512_512.png",
+ "http://img.wdjimg.com/mms/icon/v1/7/08/2b3858e31efdee8a7f28b06bdb83a087_512_512.png",
+ "http://img.wdjimg.com/mms/icon/v1/e/d0/03a49009c73496fb8ba6f779fec99d0e_512_512.png"
};
private static final String[] URLS = {
@@ -52,7 +56,9 @@ public class DataSource {
"http://dldir1.qq.com/qqcontacts/100001_phonebook_4.0.0_3148.apk",
"http://download.alicdn.com/wireless/taobao4android/latest/702757.apk",
"http://apps.wandoujia.com/apps/com.jm.android.jumei/download",
- "http://download.3g.fang.com/soufun_android_30001_7.9.0.apk"
+ "http://download.3g.fang.com/soufun_android_30001_7.9.0.apk",
+ "https://api.quickblox.com/blobs/3125095/download.xml",
+ "https://api.quickblox.com/blobs/3125089/download.xml"
};
public static DataSource getInstance() {
diff --git a/app/src/main/java/com/aspsine/multithreaddownload/demo/ui/fragment/RecyclerViewFragment.java b/app/src/main/java/com/aspsine/multithreaddownload/demo/ui/fragment/RecyclerViewFragment.java
index 8fac886..8eadccb 100644
--- a/app/src/main/java/com/aspsine/multithreaddownload/demo/ui/fragment/RecyclerViewFragment.java
+++ b/app/src/main/java/com/aspsine/multithreaddownload/demo/ui/fragment/RecyclerViewFragment.java
@@ -24,7 +24,9 @@
import java.io.File;
import java.text.DecimalFormat;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import butterknife.Bind;
import butterknife.ButterKnife;
@@ -88,6 +90,8 @@ public void onPause() {
*/
private final File mDownloadDir = new File(Environment.getExternalStorageDirectory(), "Download");
+ private Map headers;
+
@Override
public void onItemClick(View v, int position, AppInfo appInfo) {
if (appInfo.getStatus() == AppInfo.STATUS_DOWNLOADING || appInfo.getStatus() == AppInfo.STATUS_CONNECTING) {
@@ -102,10 +106,14 @@ public void onItemClick(View v, int position, AppInfo appInfo) {
}
private void download(final int position, String tag, final AppInfo appInfo) {
+ headers = new HashMap<>(1);
+ headers.put("QB-Token","76e88913e9b5f7e496b7b9e654474695485ac51d");
+
final DownloadRequest request = new DownloadRequest.Builder()
- .setTitle(appInfo.getName() + ".apk")
+ .setTitle(appInfo.getName()+ ".png")
.setUri(appInfo.getUrl())
.setFolder(mDownloadDir)
+ .setHeaders(headers)
.build();
DownloadManager.getInstance().download(request, tag, new DownloadCallback(position, appInfo));
diff --git a/library/build.gradle b/library/build.gradle
index 5b32609..c44f452 100644
--- a/library/build.gradle
+++ b/library/build.gradle
@@ -2,11 +2,11 @@ apply plugin: 'com.android.library'
android {
compileSdkVersion 23
- buildToolsVersion '23.0.0'
+ buildToolsVersion '23.0.2'
defaultConfig {
minSdkVersion 10
- targetSdkVersion 22
+ targetSdkVersion 23
versionCode 1
versionName "1.0"
}
@@ -20,5 +20,5 @@ android {
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
- compile 'com.android.support:appcompat-v7:23.0.0'
+ compile 'com.android.support:appcompat-v7:23.1.1'
}
diff --git a/library/src/main/java/com/aspsine/multithreaddownload/DownloadInfo.java b/library/src/main/java/com/aspsine/multithreaddownload/DownloadInfo.java
index 30ffa94..83c9c0e 100644
--- a/library/src/main/java/com/aspsine/multithreaddownload/DownloadInfo.java
+++ b/library/src/main/java/com/aspsine/multithreaddownload/DownloadInfo.java
@@ -1,7 +1,10 @@
package com.aspsine.multithreaddownload;
+import android.support.annotation.Nullable;
+
import java.io.File;
import java.io.Serializable;
+import java.util.Map;
/**
* Created by aspsine on 15-4-19.
@@ -14,16 +17,18 @@ public class DownloadInfo {
private long length;
private long finished;
private boolean acceptRanges;
+ private Map headers;
private int status;
public DownloadInfo() {
}
- public DownloadInfo(String name, String uri, File dir) {
+ public DownloadInfo(String name, String uri, File dir, @Nullable Map headers) {
this.name = name;
this.uri = uri;
this.dir = dir;
+ this.headers = headers;
}
public String getName() {
@@ -81,4 +86,12 @@ public boolean isAcceptRanges() {
public void setAcceptRanges(boolean acceptRanges) {
this.acceptRanges = acceptRanges;
}
+
+ public Map getHeaders() {
+ return headers;
+ }
+
+ public void setHeaders(Map headers) {
+ this.headers = headers;
+ }
}
diff --git a/library/src/main/java/com/aspsine/multithreaddownload/DownloadRequest.java b/library/src/main/java/com/aspsine/multithreaddownload/DownloadRequest.java
index d448208..9310aa8 100644
--- a/library/src/main/java/com/aspsine/multithreaddownload/DownloadRequest.java
+++ b/library/src/main/java/com/aspsine/multithreaddownload/DownloadRequest.java
@@ -1,7 +1,10 @@
package com.aspsine.multithreaddownload;
+import android.support.annotation.Nullable;
+
import java.io.File;
+import java.util.Map;
/**
* Created by Aspsine on 2015/4/20.
@@ -17,15 +20,18 @@ public class DownloadRequest {
private boolean mScannable;
+ private Map headers;
+
private DownloadRequest() {
}
- private DownloadRequest(String uri, File folder, CharSequence title, CharSequence description, boolean scannable) {
- this.mUri = uri;
- this.mFolder = folder;
- this.mTitle = title;
- this.mDescription = description;
- this.mScannable = scannable;
+ public DownloadRequest(String mUri, File mFolder, CharSequence mTitle, CharSequence mDescription, boolean mScannable,@Nullable Map headers) {
+ this.mUri = mUri;
+ this.mFolder = mFolder;
+ this.mTitle = mTitle;
+ this.mDescription = mDescription;
+ this.mScannable = mScannable;
+ this.headers = headers;
}
public String getUri() {
@@ -48,6 +54,10 @@ public boolean isScannable() {
return mScannable;
}
+ public Map getHeaders() {
+ return headers;
+ }
+
public static class Builder {
private String mUri;
@@ -60,6 +70,8 @@ public static class Builder {
private boolean mScannable;
+ private Map headers;
+
public Builder() {
}
@@ -88,8 +100,13 @@ public Builder setScannable(boolean scannable) {
return this;
}
+ public Builder setHeaders (Map headers) {
+ this.headers = headers;
+ return this;
+ }
+
public DownloadRequest build() {
- DownloadRequest request = new DownloadRequest(mUri, mFolder, mTitle, mDescription, mScannable);
+ DownloadRequest request = new DownloadRequest(mUri, mFolder, mTitle, mDescription, mScannable, headers);
return request;
}
}
diff --git a/library/src/main/java/com/aspsine/multithreaddownload/core/ConnectTaskImpl.java b/library/src/main/java/com/aspsine/multithreaddownload/core/ConnectTaskImpl.java
index 3b49cdb..c5f5e20 100644
--- a/library/src/main/java/com/aspsine/multithreaddownload/core/ConnectTaskImpl.java
+++ b/library/src/main/java/com/aspsine/multithreaddownload/core/ConnectTaskImpl.java
@@ -1,6 +1,7 @@
package com.aspsine.multithreaddownload.core;
import android.os.Process;
+import android.support.annotation.StringRes;
import android.text.TextUtils;
import com.aspsine.multithreaddownload.Constants;
@@ -13,6 +14,9 @@
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
+import java.net.URLConnection;
+import java.util.Map;
+import java.util.Set;
/**
* Created by Aspsine on 2015/7/20.
@@ -25,9 +29,12 @@ public class ConnectTaskImpl implements ConnectTask {
private volatile long mStartTime;
- public ConnectTaskImpl(String uri, OnConnectListener listener) {
+ private volatile Map headers;
+
+ public ConnectTaskImpl(String uri, Map headers, OnConnectListener listener) {
this.mUri = uri;
this.mOnConnectListener = listener;
+ this.headers = headers;
}
public void cancel() {
@@ -81,6 +88,8 @@ private void executeConnection() throws DownloadException {
httpConnection.setReadTimeout(Constants.HTTP.READ_TIME_OUT);
httpConnection.setRequestMethod(Constants.HTTP.GET);
httpConnection.setRequestProperty("Range", "bytes=" + 0 + "-");
+ setHttpHeader(headers, httpConnection);
+
final int responseCode = httpConnection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
parseResponse(httpConnection, false);
@@ -100,6 +109,15 @@ private void executeConnection() throws DownloadException {
}
}
+
+ private void setHttpHeader(Map headers, URLConnection connection) {
+ if (headers != null) {
+ for (String key : headers.keySet()) {
+ connection.setRequestProperty(key, headers.get(key));
+ }
+ }
+ }
+
private void parseResponse(HttpURLConnection httpConnection, boolean isAcceptRanges) throws DownloadException {
final long length;
diff --git a/library/src/main/java/com/aspsine/multithreaddownload/core/DownloadTaskImpl.java b/library/src/main/java/com/aspsine/multithreaddownload/core/DownloadTaskImpl.java
index 6b36892..24c6e66 100644
--- a/library/src/main/java/com/aspsine/multithreaddownload/core/DownloadTaskImpl.java
+++ b/library/src/main/java/com/aspsine/multithreaddownload/core/DownloadTaskImpl.java
@@ -158,9 +158,19 @@ private void executeDownload() throws DownloadException {
}
private void setHttpHeader(Map headers, URLConnection connection) {
- if (headers != null) {
- for (String key : headers.keySet()) {
- connection.setRequestProperty(key, headers.get(key));
+ if (mDownloadInfo.getHeaders() != null) {
+ if(headers != null) {
+ mDownloadInfo.getHeaders().putAll(headers);
+ }
+
+ for (String key : mDownloadInfo.getHeaders().keySet()) {
+ connection.setRequestProperty(key, mDownloadInfo.getHeaders().get(key));
+ }
+ }else{
+ if(headers != null){
+ for (String key : headers.keySet()) {
+ connection.setRequestProperty(key, headers.get(key));
+ }
}
}
}
diff --git a/library/src/main/java/com/aspsine/multithreaddownload/core/DownloaderImpl.java b/library/src/main/java/com/aspsine/multithreaddownload/core/DownloaderImpl.java
index 7b45b0d..1d33f63 100644
--- a/library/src/main/java/com/aspsine/multithreaddownload/core/DownloaderImpl.java
+++ b/library/src/main/java/com/aspsine/multithreaddownload/core/DownloaderImpl.java
@@ -56,7 +56,7 @@ public DownloaderImpl(DownloadRequest request, DownloadResponse response, Execut
}
private void init() {
- mDownloadInfo = new DownloadInfo(mRequest.getTitle().toString(), mRequest.getUri(), mRequest.getFolder());
+ mDownloadInfo = new DownloadInfo(mRequest.getTitle().toString(), mRequest.getUri(), mRequest.getFolder(), mRequest.getHeaders());
mDownloadTasks = new LinkedList<>();
}
@@ -182,7 +182,7 @@ public void onDownloadFailed(DownloadException de) {
}
private void connect() {
- mConnectTask = new ConnectTaskImpl(mRequest.getUri(), this);
+ mConnectTask = new ConnectTaskImpl(mRequest.getUri(), mRequest.getHeaders(), this);
mExecutor.execute(mConnectTask);
}