diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index a1cceb93..a83007cb 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -3,8 +3,9 @@
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 00000000..f327ac5c
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 00000000..3b312839
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 5d199810..fbb68289 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -37,7 +37,7 @@
-
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78078ae4..2f14585f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -5,6 +5,7 @@
+
+
diff --git a/app/src/main/java/com/arialyy/simple/activity/MainActivity.java b/app/src/main/java/com/arialyy/simple/activity/MainActivity.java
index 4b550d5a..ee122586 100644
--- a/app/src/main/java/com/arialyy/simple/activity/MainActivity.java
+++ b/app/src/main/java/com/arialyy/simple/activity/MainActivity.java
@@ -1,9 +1,15 @@
package com.arialyy.simple.activity;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
+import com.arialyy.downloadutil.core.DownloadManager;
+import com.arialyy.downloadutil.entity.DownloadEntity;
+import com.arialyy.frame.util.show.L;
import com.arialyy.simple.R;
import com.arialyy.simple.adapter.DownloadAdapter;
import com.arialyy.simple.base.BaseActivity;
@@ -29,4 +35,56 @@ public class MainActivity extends BaseActivity {
mList.setLayoutManager(new LinearLayoutManager(this));
mList.setAdapter(mAdapter);
}
+
+
+ private BroadcastReceiver mReceiver = new BroadcastReceiver() {
+ long len = 0;
+
+ @Override public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ DownloadEntity entity = intent.getParcelableExtra(DownloadManager.ENTITY);
+ switch (action) {
+ case DownloadManager.ACTION_PRE:
+ len = entity.getFileSize();
+ L.d(TAG, "download pre");
+ break;
+ case DownloadManager.ACTION_START:
+ L.d(TAG, "download start");
+ break;
+ case DownloadManager.ACTION_RESUME:
+ L.d(TAG, "download resume");
+ long location = intent.getLongExtra(DownloadManager.CURRENT_LOCATION, 1);
+ mAdapter.updateState(entity);
+ break;
+ case DownloadManager.ACTION_RUNNING:
+ long current = intent.getLongExtra(DownloadManager.CURRENT_LOCATION, 0);
+ mAdapter.setProgress(entity.getDownloadUrl(), current);
+ break;
+ case DownloadManager.ACTION_STOP:
+ L.d(TAG, "download stop");
+ mAdapter.updateState(entity);
+ break;
+ case DownloadManager.ACTION_COMPLETE:
+ L.d(TAG, "download complete");
+ mAdapter.updateState(entity);
+ break;
+ case DownloadManager.ACTION_CANCEL:
+ L.d(TAG, "download cancel");
+ break;
+ case DownloadManager.ACTION_FAIL:
+ L.d(TAG, "download fail");
+ break;
+ }
+ }
+ };
+
+ @Override protected void onResume() {
+ super.onResume();
+ registerReceiver(mReceiver, getModule(DownloadModule.class).getDownloadFilter());
+ }
+
+ @Override protected void onDestroy() {
+ super.onDestroy();
+ unregisterReceiver(mReceiver);
+ }
}
diff --git a/app/src/main/java/com/arialyy/simple/activity/SimpleTestActivity.java b/app/src/main/java/com/arialyy/simple/activity/SimpleTestActivity.java
index e7030226..5844b0c2 100644
--- a/app/src/main/java/com/arialyy/simple/activity/SimpleTestActivity.java
+++ b/app/src/main/java/com/arialyy/simple/activity/SimpleTestActivity.java
@@ -103,7 +103,7 @@ public class SimpleTestActivity extends BaseActivity {
String action = intent.getAction();
switch (action) {
case DownloadManager.ACTION_PRE:
- DownloadEntity entity = intent.getParcelableExtra(DownloadManager.ACTION_PRE);
+ DownloadEntity entity = intent.getParcelableExtra(DownloadManager.ENTITY);
len = entity.getFileSize();
L.d(TAG, "download pre");
mUpdateHandler.obtainMessage(DOWNLOAD_PRE, len).sendToTarget();
@@ -117,7 +117,7 @@ public class SimpleTestActivity extends BaseActivity {
mUpdateHandler.obtainMessage(DOWNLOAD_RESUME, location).sendToTarget();
break;
case DownloadManager.ACTION_RUNNING:
- long current = intent.getLongExtra(DownloadManager.ACTION_RUNNING, 0);
+ long current = intent.getLongExtra(DownloadManager.CURRENT_LOCATION, 0);
if (len == 0) {
mPb.setProgress(0);
} else {
diff --git a/app/src/main/java/com/arialyy/simple/adapter/DownloadAdapter.java b/app/src/main/java/com/arialyy/simple/adapter/DownloadAdapter.java
index 72e2b0e3..062e5538 100644
--- a/app/src/main/java/com/arialyy/simple/adapter/DownloadAdapter.java
+++ b/app/src/main/java/com/arialyy/simple/adapter/DownloadAdapter.java
@@ -1,16 +1,21 @@
package com.arialyy.simple.adapter;
import android.content.Context;
-import android.util.SparseArray;
+import android.util.SparseIntArray;
import android.view.View;
import android.widget.Button;
import com.arialyy.absadapter.common.AbsHolder;
import com.arialyy.absadapter.recycler_view.AbsRVAdapter;
+import com.arialyy.downloadutil.core.DownloadManager;
+import com.arialyy.downloadutil.core.command.CommandFactory;
+import com.arialyy.downloadutil.core.command.IDownloadCommand;
import com.arialyy.downloadutil.entity.DownloadEntity;
+import com.arialyy.downloadutil.util.Util;
import com.arialyy.simple.R;
import com.arialyy.simple.widget.HorizontalProgressBarWithNumber;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -22,18 +27,22 @@ import butterknife.Bind;
* 下载列表适配器
*/
public class DownloadAdapter extends AbsRVAdapter {
- private static final String TAG = "DownloadAdapter";
- private Map mProgress = new HashMap<>();
- private SparseArray mPositions = new SparseArray<>();
+ private static final String TAG = "DownloadAdapter";
+ private DownloadManager mManager;
+ private CommandFactory mFactory;
+ private Map mProgress = new HashMap<>();
+ private SparseIntArray mPositions = new SparseIntArray();
public DownloadAdapter(Context context, List data) {
super(context, data);
int i = 0;
for (DownloadEntity entity : data) {
mProgress.put(entity.getDownloadUrl(), entity.getCurrentProgress());
- mPositions.append(i, entity.getDownloadUrl());
+ mPositions.append(i, Util.keyToHashCode(entity.getDownloadUrl()));
i++;
}
+ mFactory = CommandFactory.getInstance();
+ mManager = DownloadManager.getInstance();
}
@Override protected MyHolder getViewHolder(View convertView, int viewType) {
@@ -44,13 +53,17 @@ public class DownloadAdapter extends AbsRVAdapter commands = new ArrayList<>();
+ IDownloadCommand addCommand = mFactory.createCommand(getContext(), entity,
+ CommandFactory.TASK_CREATE);
+ IDownloadCommand startCommand = mFactory.createCommand(getContext(), entity,
+ CommandFactory.TASK_START);
+ commands.add(addCommand);
+ commands.add(startCommand);
+ mManager.setCommands(commands).exe();
+ }
+
+ private void stop(DownloadEntity entity) {
+ IDownloadCommand stopCommand = mFactory.createCommand(getContext(), entity,
+ CommandFactory.TASK_STOP);
+ mManager.setCommand(stopCommand).exe();
+ }
+
+ private void cancel(DownloadEntity entity) {
+ IDownloadCommand cancelCommand = mFactory.createCommand(getContext(), entity,
+ CommandFactory.TASK_CANCEL);
+ mManager.setCommand(cancelCommand).exe();
+ }
}
class MyHolder extends AbsHolder {
@Bind(R.id.progressBar) HorizontalProgressBarWithNumber progress;
@Bind(R.id.bt) Button bt;
- public MyHolder(View itemView) {
+ MyHolder(View itemView) {
super(itemView);
}
}
diff --git a/app/src/main/java/com/arialyy/simple/module/DownloadModule.java b/app/src/main/java/com/arialyy/simple/module/DownloadModule.java
index a32b28ea..26c37711 100644
--- a/app/src/main/java/com/arialyy/simple/module/DownloadModule.java
+++ b/app/src/main/java/com/arialyy/simple/module/DownloadModule.java
@@ -6,11 +6,13 @@ import android.os.Environment;
import com.arialyy.downloadutil.core.DownloadManager;
import com.arialyy.downloadutil.entity.DownloadEntity;
+import com.arialyy.downloadutil.util.Util;
import com.arialyy.frame.util.AndroidUtils;
import com.arialyy.frame.util.StringUtil;
import com.arialyy.simple.R;
import com.arialyy.simple.base.BaseModule;
+import java.io.File;
import java.util.ArrayList;
import java.util.List;
@@ -24,14 +26,23 @@ public class DownloadModule extends BaseModule {
/**
* 设置下载数据
+ *
* @return
*/
public List getDownloadData() {
+ List list = DownloadEntity.findAllData(DownloadEntity.class);
+ if (list == null) {
+ list = createNewDownload();
+ }
+ return list;
+ }
+
+ private List createNewDownload() {
List list = new ArrayList<>();
String[] urls = getContext().getResources()
.getStringArray(R.array.test_apk_download_url);
for (String url : urls) {
- String fileName = StringUtil.keyToHashKey(url) + ".apk";
+ String fileName = Util.keyToHashCode(url) + ".apk";
DownloadEntity entity = new DownloadEntity();
entity.setDownloadUrl(url);
entity.setDownloadPath(getDownloadPath(url));
@@ -43,9 +54,10 @@ public class DownloadModule extends BaseModule {
/**
* 下载广播过滤器
+ *
* @return
*/
- public IntentFilter getDownloadFilter(){
+ public IntentFilter getDownloadFilter() {
IntentFilter filter = new IntentFilter();
filter.addDataScheme(getContext().getPackageName());
filter.addAction(DownloadManager.ACTION_PRE);
@@ -60,7 +72,13 @@ public class DownloadModule extends BaseModule {
}
private String getDownloadPath(String url) {
- return Environment.getExternalStorageDirectory().getPath() + "/" + AndroidUtils.getAppName(
- getContext()) + "downloads/" + StringUtil.keyToHashKey(url) + ".apk";
+ String path = Environment.getExternalStorageDirectory()
+ .getPath() + "/" + AndroidUtils.getAppName(getContext()) + "downloads/" + StringUtil
+ .keyToHashKey(url) + ".apk";
+ File file = new File(path);
+ if (!file.getParentFile().exists()) {
+ file.getParentFile().mkdirs();
+ }
+ return path;
}
}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index ef2fa6e5..245771f5 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,5 +1,6 @@
-
+
true
- true
- @android:color/transparent
+ - @color/colorPrimary
+ - @color/colorPrimaryDark
+ - @color/colorAccent
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 044694c4..b37e2bbc 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -4,9 +4,9 @@
- http://static.gaoshouyou.com/d/22/94/822260b849944492caadd2983f9bb624.apk
- - http://static.gaoshouyou.com/d/21/e8/61218d78d0e8b79df68dbc18dd484c97.apk
- - http://static.gaoshouyou.com/d/12/0d/7f120f50c80d2e7b8c4ba24ece4f9cdd.apk
- - http://static.gaoshouyou.com/d/d4/4f/d6d48db3794fb9ecf47e83c346570881.apk
+
+
+
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 177cefc8..50e7ba5e 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -11,6 +11,9 @@
diff --git a/build.gradle b/build.gradle
index de50f8c6..5450420d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -6,7 +6,7 @@ buildscript {
}
dependencies {
// classpath 'com.android.tools.build:gradle:2.1.0'
- classpath 'com.android.tools.build:gradle:1.5.0'
+ classpath 'com.android.tools.build:gradle:2.2.0'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.1.1"
// NOTE: Do not place your application dependencies here; they belong
diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadManager.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadManager.java
index deac727e..67905427 100644
--- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadManager.java
+++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadManager.java
@@ -8,6 +8,7 @@ import com.arialyy.downloadutil.core.command.IDownloadCommand;
import com.arialyy.downloadutil.entity.DownloadEntity;
import com.arialyy.downloadutil.orm.DbEntity;
import com.arialyy.downloadutil.orm.DbUtil;
+import com.arialyy.downloadutil.util.Task;
import java.util.ArrayList;
import java.util.List;
@@ -63,7 +64,7 @@ public class DownloadManager {
/**
* 下载实体
*/
- public static final String DATA = "DOWNLOAD_ENTITY";
+ public static final String ENTITY = "DOWNLOAD_ENTITY";
/**
* 位置
diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadTarget.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadTarget.java
index 59f8bd4f..902ef085 100644
--- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadTarget.java
+++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadTarget.java
@@ -48,8 +48,13 @@ public class DownloadTarget extends IDownloadTarget {
}
@Override public void stopTask(Task task) {
- if (mExecutePool.removeTask(task)) {
+ if (task.isDownloading()) {
+ if (mExecutePool.removeTask(task)) {
+ task.stop();
+ }
+ }else {
task.stop();
+ Log.w(TAG, "停止任务失败,【任务已经停止】");
}
}
diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/IDownloadTarget.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/IDownloadTarget.java
index 199746ee..f7e80963 100644
--- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/IDownloadTarget.java
+++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/IDownloadTarget.java
@@ -98,6 +98,14 @@ public abstract class IDownloadTarget implements IDownloader, ITask {
this.mTargetListener = targetListener;
}
+ /**
+ * 获取任务执行池
+ * @return
+ */
+ public ExecutePool getExecutePool(){
+ return mExecutePool;
+ }
+
/**
* 获取当前运行的任务数
*
diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/StopCommand.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/StopCommand.java
index 8324a4d8..47ff316a 100644
--- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/StopCommand.java
+++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/StopCommand.java
@@ -3,8 +3,8 @@ package com.arialyy.downloadutil.core.command;
import android.content.Context;
import android.util.Log;
-import com.arialyy.downloadutil.util.Task;
import com.arialyy.downloadutil.entity.DownloadEntity;
+import com.arialyy.downloadutil.util.Task;
/**
* Created by lyy on 2016/9/20.
@@ -22,10 +22,15 @@ class StopCommand extends IDownloadCommand {
@Override public void executeComment() {
Task task = target.getTask(mEntity);
- if (task != null) {
- target.stopTask(task);
+ if (task == null) {
+ if (mEntity.getState() == DownloadEntity.STATE_DOWNLOAD_ING) {
+ task = target.createTask(mEntity);
+ target.stopTask(task);
+ } else {
+ Log.w(TAG, "停止命令执行失败,【调度器中没有该任务】");
+ }
} else {
- Log.w(TAG, "停止命令执行失败,【调度器中没有该任务】");
+ target.stopTask(task);
}
}
}
\ No newline at end of file
diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/orm/DbEntity.java b/downloadutil/src/main/java/com/arialyy/downloadutil/orm/DbEntity.java
index 952a31b9..b9b7be3d 100644
--- a/downloadutil/src/main/java/com/arialyy/downloadutil/orm/DbEntity.java
+++ b/downloadutil/src/main/java/com/arialyy/downloadutil/orm/DbEntity.java
@@ -23,7 +23,7 @@ public class DbEntity {
/**
* 获取所有行的rowid
*/
- public int[] getRowId() {
+ public int[] getRowIds() {
return mUtil.getRowId(getClass());
}
@@ -71,6 +71,18 @@ public class DbEntity {
* 查找数据在表中是否存在
*/
private boolean thisIsExist() {
+ return findData(getClass(), new String[]{"rowid"}, new String[]{rowID + ""}) != null;
+ }
+
+ /**
+ * 插入数据
+ */
+ public void insert() {
+ mUtil.insertData(this);
+ updateRowID();
+ }
+
+ private void updateRowID() {
try {
Field[] fields = Util.getFields(getClass());
List where = new ArrayList<>();
@@ -84,19 +96,14 @@ public class DbEntity {
where.add(field.getName());
values.add(field.get(this) + "");
}
- return findData(getClass(), where.toArray(new String[where.size()]),
- values.toArray(new String[values.size()])) != null;
+ DbEntity entity = findData(getClass(), where.toArray(new String[where.size()]),
+ values.toArray(new String[values.size()]));
+ if (entity != null) {
+ rowID = entity.rowID;
+ }
} catch (IllegalAccessException e) {
e.printStackTrace();
}
- return false;
- }
-
- /**
- * 插入数据
- */
- public void insert() {
- mUtil.insertData(this);
}
/**
diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/orm/DbUtil.java b/downloadutil/src/main/java/com/arialyy/downloadutil/orm/DbUtil.java
index cc250570..3c487d8f 100644
--- a/downloadutil/src/main/java/com/arialyy/downloadutil/orm/DbUtil.java
+++ b/downloadutil/src/main/java/com/arialyy/downloadutil/orm/DbUtil.java
@@ -62,7 +62,7 @@ public class DbUtil {
/**
* 删除某条数据
*/
- protected void delData(Class clazz, @NonNull Object[] wheres,
+ void delData(Class clazz, @NonNull Object[] wheres,
@NonNull Object[] values) {
mDb = mHelper.getWritableDatabase();
if (wheres.length <= 0 || values.length <= 0) {
@@ -88,7 +88,7 @@ public class DbUtil {
/**
* 修改某行数据
*/
- protected void modifyData(DbEntity dbEntity) {
+ void modifyData(DbEntity dbEntity) {
mDb = mHelper.getWritableDatabase();
Class> clazz = dbEntity.getClass();
Field[] fields = Util.getFields(clazz);
@@ -105,7 +105,7 @@ public class DbUtil {
sb.append(i > 0 ? ", " : "");
try {
sb.append(field.getName())
- .append(" = '")
+ .append("='")
.append(field.get(dbEntity).toString())
.append("'");
} catch (IllegalAccessException e) {
@@ -113,6 +113,7 @@ public class DbUtil {
}
i++;
}
+ sb.append(" where rowid=").append(dbEntity.rowID);
print(MODIFY_DATA, sb.toString());
mDb.execSQL(sb.toString());
}
@@ -122,7 +123,10 @@ public class DbUtil {
/**
* 遍历所有数据
*/
- protected List findAllData(Class clazz) {
+ List findAllData(Class clazz) {
+ if (!tableExists(clazz)) {
+ createTable(clazz);
+ }
mDb = mHelper.getReadableDatabase();
StringBuilder sb = new StringBuilder();
sb.append("SELECT rowid, * FROM ").append(Util.getClassName(clazz));
@@ -134,7 +138,7 @@ public class DbUtil {
/**
* 条件查寻数据
*/
- protected List findData(Class clazz, @NonNull String[] wheres,
+ List findData(Class clazz, @NonNull String[] wheres,
@NonNull String[] values) {
if (!tableExists(clazz)) {
createTable(clazz);
@@ -163,7 +167,7 @@ public class DbUtil {
/**
* 插入数据
*/
- protected void insertData(DbEntity dbEntity) {
+ void insertData(DbEntity dbEntity) {
Class> clazz = dbEntity.getClass();
if (!tableExists(clazz)) {
createTable(clazz);
@@ -211,14 +215,14 @@ public class DbUtil {
/**
* 查找某张表是否存在
*/
- public synchronized boolean tableExists(Class clazz) {
+ synchronized boolean tableExists(Class clazz) {
if (mDb == null || !mDb.isOpen()) {
mDb = mHelper.getReadableDatabase();
}
Cursor cursor = null;
try {
StringBuilder sb = new StringBuilder();
- sb.append("SELECT COUNT(*) AS c FROM sqlite_master WHERE type ='table' AND name ='");
+ sb.append("SELECT COUNT(*) AS c FROM sqlite_master WHERE type='table' AND name='");
sb.append(Util.getClassName(clazz));
sb.append("'");
print(TABLE_EXISTS, sb.toString());
@@ -326,7 +330,7 @@ public class DbUtil {
/**
* 获取所在行Id
*/
- protected int[] getRowId(Class clazz) {
+ int[] getRowId(Class clazz) {
mDb = mHelper.getReadableDatabase();
Cursor cursor = mDb.rawQuery("SELECT rowid, * FROM " + Util.getClassName(clazz), null);
int[] ids = new int[cursor.getCount()];
@@ -343,7 +347,7 @@ public class DbUtil {
/**
* 获取行Id
*/
- protected int getRowId(Class clazz, Object[] wheres, Object[] values) {
+ int getRowId(Class clazz, Object[] wheres, Object[] values) {
mDb = mHelper.getReadableDatabase();
if (wheres.length <= 0 || values.length <= 0) {
Log.e(TAG, "请输入删除条件");
@@ -404,7 +408,6 @@ public class DbUtil {
} else if (type == byte[].class) {
field.set(entity, cursor.getBlob(column));
}
- // field.set(entity, cursor.getColumnIndex("entity_id"));
}
entity.rowID = cursor.getInt(cursor.getColumnIndex("rowid"));
entitys.add(entity);
diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/util/Task.java b/downloadutil/src/main/java/com/arialyy/downloadutil/util/Task.java
index 53dd1bb3..ba7f9d1a 100644
--- a/downloadutil/src/main/java/com/arialyy/downloadutil/util/Task.java
+++ b/downloadutil/src/main/java/com/arialyy/downloadutil/util/Task.java
@@ -55,6 +55,16 @@ public class Task {
public void stop() {
if (mUtil.isDownloading()) {
mUtil.stopDownload();
+ } else {
+ mEntity.setState(DownloadEntity.STATE_STOP);
+ mEntity.save();
+ sendInState2Target(IDownloadTarget.STOP);
+
+ // 发送停止下载的广播
+ Intent intent = createIntent(DownloadManager.ACTION_STOP);
+ intent.putExtra(DownloadManager.CURRENT_LOCATION, mEntity.getCurrentProgress());
+ intent.putExtra(DownloadManager.ENTITY, mEntity);
+ mContext.sendBroadcast(intent);
}
}
@@ -84,40 +94,61 @@ public class Task {
mUtil.delConfigFile();
mUtil.delTempFile();
mEntity.deleteData();
+ sendInState2Target(IDownloadTarget.CANCEL);
//发送取消下载的广播
- Uri.Builder builder = new Uri.Builder();
- builder.scheme(mContext.getPackageName());
- Uri uri = builder.build();
- Intent intent = new Intent(DownloadManager.ACTION_CANCEL);
- intent.setData(uri);
- intent.putExtra(DownloadManager.ACTION_CANCEL, mEntity);
+ Intent intent = createIntent(DownloadManager.ACTION_CANCEL);
+ intent.putExtra(DownloadManager.ENTITY, mEntity);
mContext.sendBroadcast(intent);
}
}
+ /**
+ * 创建特定的Intent
+ *
+ * @param action
+ * @return
+ */
+ private Intent createIntent(String action) {
+ Uri.Builder builder = new Uri.Builder();
+ builder.scheme(mContext.getPackageName());
+ Uri uri = builder.build();
+ Intent intent = new Intent(action);
+ intent.setData(uri);
+ return intent;
+ }
+
+ /**
+ * 将任务状态发送给下载器
+ *
+ * @param state {@link IDownloadTarget#START}
+ */
+ private void sendInState2Target(int state) {
+ if (mOutHandler != null) {
+ mOutHandler.obtainMessage(state, mEntity).sendToTarget();
+ }
+ }
+
/**
* 下载监听类
*/
- private static class DownloadListener extends DownLoadUtil.DownloadListener {
+ private class DownloadListener extends DownLoadUtil.DownloadListener {
Handler outHandler;
Context context;
Intent sendIntent;
long INTERVAL = 1024 * 10; //10k大小的间隔
long lastLen = 0; //上一次发送长度
+ long lastTime = 0;
+ long INTERVAL_TIME = 60 * 1000; //10k大小的间隔
DownloadEntity downloadEntity;
- public DownloadListener(Context context, DownloadEntity downloadEntity,
+ DownloadListener(Context context, DownloadEntity downloadEntity,
Handler outHandler) {
this.context = context;
this.outHandler = outHandler;
this.downloadEntity = downloadEntity;
- sendIntent = new Intent(DownloadManager.ACTION_RUNNING);
- Uri.Builder builder = new Uri.Builder();
- builder.scheme(context.getPackageName());
- Uri uri = builder.build();
- sendIntent.setData(uri);
-
+ sendIntent = createIntent(DownloadManager.ACTION_RUNNING);
+ sendIntent.putExtra(DownloadManager.ENTITY, downloadEntity);
}
@Override public void onPreDownload(HttpURLConnection connection) {
@@ -143,9 +174,14 @@ public class Task {
@Override public void onProgress(long currentLocation) {
super.onProgress(currentLocation);
- if (currentLocation - lastLen > INTERVAL) { //不要太过于频繁发送广播
- sendIntent.putExtra(DownloadManager.ACTION_RUNNING, currentLocation);
- lastLen = currentLocation;
+// if (currentLocation - lastLen > INTERVAL) { //不要太过于频繁发送广播
+// sendIntent.putExtra(DownloadManager.CURRENT_LOCATION, currentLocation);
+// lastLen = currentLocation;
+// context.sendBroadcast(sendIntent);
+// }
+ if (System.currentTimeMillis() - lastLen > INTERVAL_TIME){
+ sendIntent.putExtra(DownloadManager.CURRENT_LOCATION, currentLocation);
+ lastTime = System.currentTimeMillis();
context.sendBroadcast(sendIntent);
}
}
@@ -180,27 +216,12 @@ public class Task {
sendIntent(DownloadManager.ACTION_FAIL, -1);
}
- /**
- * 将任务状态发送给下载器
- *
- * @param state {@link IDownloadTarget#START}
- */
- private void sendInState2Target(int state) {
- if (outHandler != null) {
- outHandler.obtainMessage(state, downloadEntity).sendToTarget();
- }
- }
-
private void sendIntent(String action, long location) {
downloadEntity.setDownloadComplete(action.equals(DownloadManager.ACTION_COMPLETE));
downloadEntity.setCurrentProgress(location);
downloadEntity.update();
- Uri.Builder builder = new Uri.Builder();
- builder.scheme(context.getPackageName());
- Uri uri = builder.build();
- Intent intent = new Intent(action);
- intent.setData(uri);
- intent.putExtra(action, downloadEntity);
+ Intent intent = createIntent(action);
+ intent.putExtra(DownloadManager.ENTITY, downloadEntity);
if (location != -1) {
intent.putExtra(DownloadManager.CURRENT_LOCATION, location);
}
diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/util/Util.java b/downloadutil/src/main/java/com/arialyy/downloadutil/util/Util.java
index 9cd0048d..5135ad10 100644
--- a/downloadutil/src/main/java/com/arialyy/downloadutil/util/Util.java
+++ b/downloadutil/src/main/java/com/arialyy/downloadutil/util/Util.java
@@ -58,7 +58,24 @@ public class Util {
}
/**
- * 将缓存的key转换为hash码
+ * 字符串转hashcode
+ *
+ * @param str
+ * @return
+ */
+ public static int keyToHashCode(String str) {
+ int total = 0;
+ for (int i = 0; i < str.length() && i < 6; i++) {
+ char ch = str.charAt(i);
+ if (ch == '-') ch = (char) 28; // does not contain the same last 5 bits as any letter
+ if (ch == '\'') ch = (char) 29; // nor this
+ total = (total * 33) + (ch & 0x1F);
+ }
+ return total;
+ }
+
+ /**
+ * 将key转换为16进制码
*
* @param key 缓存的key
* @return 转换后的key的值, 系统便是通过该key来读写缓存
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 122a0dca..5b2de139 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Mon Dec 28 10:00:20 PST 2015
+#Fri Oct 07 09:47:16 CST 2016
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip