소스 검색

使用Aria下载框架来下载文件

zengjiebin 8 년 전
부모
커밋
bb5f7ecb95

+ 6 - 1
app/build.gradle

@@ -254,7 +254,12 @@ dependencies {
     compile project(':ucrop')
     compile project(':kfzslibrary')
 
-    compile 'com.mindorks.android:prdownloader:0.2.0'
+    compile ('com.arialyy.aria:aria-core:3.3.16'){
+        exclude group: 'com.android.support'
+    }
+    annotationProcessor 'com.arialyy.aria:aria-compiler:3.3.16'
+
+
 }
 def releaseTime() {
     return new Date().format("MMddHHmm", TimeZone.getDefault())

+ 1 - 5
app/src/main/AndroidManifest.xml

@@ -7,21 +7,16 @@
     <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
     <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW"/>
     <uses-permission android:name="android.permission.REQUEST_MEDIA_PROJECTION"/>
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
     <uses-permission android:name="android.permission.INTERNET"/>
-    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
     <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
     <uses-permission android:name="android.permission.GET_TASKS"/>
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
     <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
     <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>
     <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
     <!--必须的权限配置-->
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
-    <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
     <uses-permission android:name="android.permission.READ_LOGS" />
@@ -32,6 +27,7 @@
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
+    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
 
     <permission
         android:name="android.permission.PACKAGE_USAGE_STATS"

+ 65 - 0
app/src/main/assets/aria_config.xml

@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<aria>
+
+    <!--注意,修改该配置文件中的属性会覆盖代码中所设置的属性-->
+    <download>
+
+        <!--设置下载线程,线程下载数改变后,新的下载任务才会生效,如果任务大小小于1m,该设置也不会生效-->
+        <threadNum value="3"/>
+
+        <!--设置下载队列最大任务数, 默认为2-->
+        <maxTaskNum value="5"/>
+
+        <!--设置下载失败,重试次数,默认为10-->
+        <reTryNum value="2"/>
+
+        <!--设置重试间隔,单位为毫秒,默认2000毫秒-->
+        <reTryInterval value="5000"/>
+
+        <!--设置url连接超时时间,单位为毫秒,默认5000毫秒-->
+        <connectTimeOut value="5000"/>
+
+        <!--设置IO流读取时间,单位为毫秒,默认20000毫秒,该时间不能少于10000毫秒-->
+        <iOTimeOut value="10000"/>
+
+        <!--设置写文件buff大小,该数值大小不能小于2048,数值变小,下载速度会变慢-->
+        <buffSize value="8192"/>
+
+        <!--设置https ca 证书信息;path 为assets目录下的CA证书完整路径,name 为CA证书名-->
+        <ca name="" path=""/>
+
+        <!--是否需要转换速度单位,转换完成后为:1b/s、1kb/s、1mb/s、1gb/s、1tb/s,如果不需要将返回byte长度-->
+        <convertSpeed value="true"/>
+
+        <!--执行队列类型,见com.arialyy.aria.core.QueueMod,默认类型为wait-->
+        <queueMod value="wait"/>
+
+        <!--进度更新更新间隔,默认1000毫秒-->
+        <updateInterval value="1000"/>
+
+    </download>
+
+    <upload>
+        <!--是否需要转换速度单位,转换完成后为:1b/s、1kb/s、1mb/s、1gb/s、1tb/s,如果不需要将返回byte长度-->
+        <convertSpeed value="true"/>
+
+        <!--设置上传队列最大任务数, 默认为2-->
+        <maxTaskNum value="2"/>
+
+        <!--设置上传失败,重试次数,默认为10-->
+        <reTryNum value="2"/>
+
+        <!--设置重试间隔,单位为毫秒-->
+        <reTryInterval value="2000"/>
+
+        <!--设置url连接超时时间,单位为毫秒,默认5000毫秒-->
+        <connectTimeOut value="5000"/>
+
+        <!--执行队列类型,见com.arialyy.aria.core.QueueMod,默认类型为wait-->
+        <queueMod value="wait"/>
+
+        <!--进度更新更新间隔,默认1000毫秒-->
+        <updateInterval value="1000"/>
+    </upload>
+
+</aria>

+ 74 - 3
app/src/main/java/com/kfzs/duanduan/ActDownloadMgr.java

@@ -13,6 +13,9 @@ import android.widget.ProgressBar;
 import android.widget.TextView;
 import android.widget.Toast;
 
+import com.arialyy.annotations.Download;
+import com.arialyy.aria.core.Aria;
+import com.arialyy.aria.core.download.DownloadTask;
 import com.kfzs.appstore.utils.adapter.OnMDLItemChildClickListener;
 import com.kfzs.duanduan.adp.DownloadMgrAdapter;
 import com.kfzs.duanduan.bean.CompareResult;
@@ -29,6 +32,7 @@ import com.kfzs.duanduan.utils.dlg.TitleBarUtils;
 import com.kfzs.duanduan.view.DialogStorageLow;
 import com.kfzs.duanduan.view.KFProgressButton;
 import com.sheep.jiuyan.samllsheep.R;
+import com.sheep.jiuyan.samllsheep.utils.ClassFileHelper;
 
 import org.greenrobot.eventbus.EventBus;
 import org.greenrobot.eventbus.Subscribe;
@@ -41,6 +45,7 @@ import java.util.List;
 import butterknife.BindView;
 import butterknife.ButterKnife;
 
+
 /**
  * Download manger activity
  * Created by HooRang on 2017/4/10.
@@ -89,6 +94,7 @@ public class ActDownloadMgr extends BaseCompatActivity {
         downloadTaskService = new DownloadTaskService(this);
 
         initControlsEvents();
+        Aria.download(this).register();
 
     }
 
@@ -125,9 +131,9 @@ public class ActDownloadMgr extends BaseCompatActivity {
                         downloadTaskItemEventAction(downloadTask);
                         break;
                     case R.id.download_mgr_iv_icon:
-                        Intent intent = new Intent(ActDownloadMgr.this, ActGameDetails.class);
-                        intent.putExtra(KFIntentKeys.EXTRA_GAME_ID, String.valueOf(downloadTask.getMGameID()));
-                        startActivity(intent);
+//                        Intent intent = new Intent(ActDownloadMgr.this, ActGameDetails.class);
+//                        intent.putExtra(KFIntentKeys.EXTRA_GAME_ID, String.valueOf(downloadTask.getMGameID()));
+//                        startActivity(intent);
                         break;
                     default:
 
@@ -381,7 +387,72 @@ public class ActDownloadMgr extends BaseCompatActivity {
         tvEmptyView.setVisibility(isShow ? View.GONE : View.VISIBLE);
         lvDownloadMgr.setVisibility(!isShow ? View.GONE : View.VISIBLE);
     }
+    @Download.onPre void onPre(DownloadTask task) {
+    }
+    @Download.onTaskStart void taskStart(DownloadTask task) {
+    }
+    @Download.onTaskResume void taskResume(DownloadTask task) {
+    }
+    //在这里处理任务执行中的状态,如进度进度条的刷新
+    @Download.onTaskRunning protected void running(DownloadTask task) {
+        int p = task.getPercent();    //任务进度百分比
+        downloadTaskService.setDownloadTaskPercent(p, task.getCurrentProgress()/1024d/1024d,task.getFileSize()/1024d/1024d,0,task.getKey());
+        String speed = task.getConvertSpeed();    //转换单位后的下载速度,单位转换需要在配置文件中打开
+        System.out.println("Aria "+task.getKey()+",p " + p + ", speed = " + speed);
+        String url = task.getKey();
+        KFProgressButton targetBtn = (KFProgressButton) lvDownloadMgr.findViewWithTag(DownloadMgrAdapter.PUBLIC_TAG_PREFIX_BUTTON + url);
+        ProgressBar pbProgress = (ProgressBar) lvDownloadMgr.findViewWithTag(DownloadMgrAdapter.PUBLIC_TAG_PREFIX_PROGRESS + url);
+        TextView tvProgress = (TextView) lvDownloadMgr.findViewWithTag(DownloadMgrAdapter.PUBLIC_TAG_PREFIX_TEXTVIEW + url);
+        if (tvProgress == null) {
+            return;
+        }
+        tvProgress.setText(strFormat(this,task.getCurrentProgress()/1024d/1024d,task.getFileSize()/1024d/1024d));
+        pbProgress.setProgress(task.getPercent());
+        targetBtn.setText(R.string.downloading);
+
+        setTaskStatusByDownloadUrl(url, DownloadTaskService.STATUS_ING, "");
+    }
+
+    @Download.onTaskStop void taskStop(DownloadTask task) {
+        String url = task.getKey();
+        downloadTaskService.setDownloadTaskStatus(url, DownloadTaskService.STATUS_PAUSE);
+    }
 
+    @Download.onNoSupportBreakPoint void onNoSupportBreakPoint(DownloadTask task) {
+    }
+
+    @Download.onTaskCancel void taskCancel(DownloadTask task) {
+        downloadTaskService.deleteDownloadTaskByDownloadUrl(task.getKey());
+        String url = task.getKey();
+        int iTempPosition = -1;
+        for (int position = 0; position < downloadTasks.size(); position++) {
+            DownLoadInfo downLoadInfo = downloadTasks.get(position);
+            if (url.equals(downLoadInfo.getMDownloadUrl())) {
+                iTempPosition = position;
+                break;
+            }
+        }
+        if (iTempPosition < 0) {
+            return;
+        }
+        removeTask(iTempPosition);
+    }
+
+    @Download.onTaskFail void taskFail(DownloadTask task) {
+        downloadTaskService.setDownloadTaskStatus(task.getKey(), DownloadTaskService.STATUS_FAIL);
+        String url = task.getKey();
+        KFProgressButton targetBtn = (KFProgressButton) lvDownloadMgr.findViewWithTag(DownloadMgrAdapter.PUBLIC_TAG_PREFIX_BUTTON + url);
+        targetBtn.setText(R.string.download_fail);
+        setTaskStatusByDownloadUrl(url, DownloadTaskService.STATUS_FAIL, "");
+    }
+
+    @Download.onTaskComplete void taskComplete(DownloadTask task) {
+        downloadTaskService.setDownloadTaskFinish(task.getKey(), task.getDownloadPath());
+        TextView tvProgress = (TextView) lvDownloadMgr.findViewWithTag(DownloadMgrAdapter.PUBLIC_TAG_PREFIX_TEXTVIEW + task.getKey());
+        tvProgress.setText(R.string.download_completed);
+
+        setTaskStatusByDownloadUrl(task.getKey(), DownloadTaskService.STATUS_FINISH, task.getDownloadPath());
+    }
 
 }
 

+ 4 - 0
app/src/main/java/com/kfzs/duanduan/ActMain.java

@@ -15,6 +15,9 @@ import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.Toast;
 
+import com.arialyy.annotations.Download;
+import com.arialyy.aria.core.Aria;
+import com.arialyy.aria.core.download.DownloadTask;
 import com.kfzs.appstore.utils.restful.KFZSNetwork;
 import com.kfzs.duanduan.bean.KFIntentKeys;
 import com.kfzs.duanduan.bll.UrlBll;
@@ -88,6 +91,7 @@ public class ActMain extends BaseCompatActivity{
 
         initLinsener();
 
+        Aria.download(this).register();
     }
 
 

+ 2 - 17
app/src/main/java/com/kfzs/duanduan/KFZSApp.java

@@ -1,7 +1,6 @@
 package com.kfzs.duanduan;
 
 import android.content.Context;
-import android.content.Intent;
 import android.content.pm.PackageInfo;
 import android.os.Build;
 import android.os.Environment;
@@ -9,8 +8,7 @@ import android.support.multidex.MultiDexApplication;
 import android.util.DisplayMetrics;
 import android.util.Log;
 
-import com.downloader.PRDownloader;
-import com.downloader.PRDownloaderConfig;
+import com.arialyy.aria.core.Aria;
 import com.kfzs.appstore.utils.restful.KFZSNetwork;
 import com.kfzs.duanduan.db.DataSave;
 import com.kfzs.duanduan.utils.ApkUtils;
@@ -75,7 +73,6 @@ public class KFZSApp extends MultiDexApplication {
         setOnlyContext(this);
         initUtils(DEBUG);
         initOwnCatchPath();
-        initFileDownloader();
     }
 
     private void initUtils(boolean debug) {
@@ -142,6 +139,7 @@ public class KFZSApp extends MultiDexApplication {
      */
     public void quit() {
         try {
+            Aria.download(this).stopAllTask();
             for (BaseCompatActivity appCompatActivity : appCompatActivityList) {
                 appCompatActivity.finish();
             }
@@ -214,19 +212,6 @@ public class KFZSApp extends MultiDexApplication {
         application = this;
     }
 
-    // init FileDownloader
-    private void initFileDownloader() {
-        ClassFileHelper.getInstance().createSDDirection();
-
-// Setting timeout globally for the download network requests:
-        PRDownloaderConfig config = PRDownloaderConfig.newBuilder()
-                .setReadTimeout(500_000)
-                .setConnectTimeout(500_000)
-                .build();
-        PRDownloader.initialize(getApplicationContext(), config);
-
-    }
-
 
     /**
      * Preload all installed packages to memory

+ 28 - 96
app/src/main/java/com/kfzs/duanduan/services/DownloadTaskService.java

@@ -1,20 +1,17 @@
 package com.kfzs.duanduan.services;
 
 import android.content.Context;
+import android.os.Build;
 import android.text.TextUtils;
 
-import com.downloader.Error;
-import com.downloader.OnCancelListener;
-import com.downloader.OnDownloadListener;
-import com.downloader.OnPauseListener;
-import com.downloader.OnProgressListener;
-import com.downloader.OnStartOrResumeListener;
-import com.downloader.PRDownloader;
-import com.downloader.Progress;
-import com.downloader.request.DownloadRequest;
+import com.arialyy.aria.core.Aria;
+import com.arialyy.aria.core.download.DownloadTarget;
+import com.kfzs.duanduan.KFZSApp;
 import com.kfzs.duanduan.bean.DownloadStatus;
 import com.kfzs.duanduan.datashare.DDProviderHelper;
 import com.kfzs.duanduan.datashare.provider.download.DownLoadInfo;
+import com.sheep.gamegroup.model.entity.TaskEty;
+import com.sheep.gamegroup.util.CommonUtil;
 import com.sheep.jiuyan.samllsheep.utils.ClassFileHelper;
 
 import org.greenrobot.eventbus.EventBus;
@@ -23,6 +20,8 @@ import java.io.File;
 import java.text.DecimalFormat;
 import java.util.List;
 
+import static com.sheep.jiuyan.samllsheep.utils.ClassFileHelper.DIR;
+
 /**
  * The local database persistence if download task
  * The service of sql operate
@@ -146,6 +145,17 @@ public class DownloadTaskService {
     }
 
 
+    public DownLoadInfo getDownloadTaskByUrl(TaskEty taskEty) {
+        DownLoadInfo downLoadInfo = getDownloadTaskByUrl(taskEty.getDownload_link());
+        if(downLoadInfo == null){
+            downLoadInfo = CommonUtil.getInstance()
+                    .addNewDownloadTask(taskEty.getTask_name(), taskEty.getDownload_link(), taskEty.getPackage_names(),
+                            Build.VERSION.SDK_INT, taskEty.getIcon(), taskEty.getPackage_size(), taskEty.getAcceptedTaskId(), 1);
+        }
+        return downLoadInfo;
+    }
+
+
     public DownLoadInfo getDownloadTaskByUrl(String downloadUrl) {
         return DDProviderHelper
                 .getInstance()
@@ -328,100 +338,22 @@ public class DownloadTaskService {
     }
 
 
-    private double getRandomFakeDownloadSize() {
-        DecimalFormat df = new DecimalFormat("######0.0");
-        double a = (Math.random() * 1);
-        return Double.valueOf(df.format(a));
-    }
-
     public void start(DownLoadInfo downLoadInfo) {
-        if (downLoadInfo.getMDownloadTaskId() != null) {
-            PRDownloader.resume(downLoadInfo.getMDownloadTaskId());
-            return;
-        }
-        downLoadInfo.setMApkPath(ClassFileHelper.DIR + File.separator + downLoadInfo.getMPackageName() + ClassFileHelper.FILE_SUFFIX);
-        addDownloadTask(downLoadInfo);
-        final DownloadStatus statusInfo = new DownloadStatus();
-        statusInfo.setFileDownloadedSize(downLoadInfo.getMDownloadedSize() == null ? getRandomFakeDownloadSize() : downLoadInfo.getMDownloadedSize());
-        statusInfo.setFileTotalSize(downLoadInfo.getMTotalSize() == null ? 0 : downLoadInfo.getMTotalSize() / 1024f / 1024);
-        statusInfo.setDownloadUrl(downLoadInfo.getMDownloadUrl());
-        statusInfo.setDownloadPgrs(downLoadInfo.getMPercent() == null ? 0 : downLoadInfo.getMPercent());
-        statusInfo.setApkPath(downLoadInfo.getMApkPath());
-        statusInfo.setGameId(downLoadInfo.getMGameID());
-        DownloadRequest downloadRequest = PRDownloader.download(downLoadInfo.getMDownloadUrl(), ClassFileHelper.DIR, downLoadInfo.getMPackageName() + ClassFileHelper.FILE_SUFFIX)
-                .build()
-                .setOnStartOrResumeListener(new OnStartOrResumeListener() {
-                    @Override
-                    public void onStartOrResume() {
-                        statusInfo.setStatus(DownloadTaskService.STATUS_INIT);
-                        EventBus.getDefault().post(statusInfo);
-                    }
-                })
-                .setOnPauseListener(new OnPauseListener() {
-                    @Override
-                    public void onPause() {
-                        statusInfo.setStatus(DownloadTaskService.STATUS_PAUSE);
-                        EventBus.getDefault().post(statusInfo);
-                    }
-                })
-                .setOnCancelListener(new OnCancelListener() {
-                    @Override
-                    public void onCancel() {
-                        statusInfo.setStatus(DownloadTaskService.STATUS_DELETE);
-                        EventBus.getDefault().post(statusInfo);
-                    }
-                })
-                .setOnProgressListener(new OnProgressListener() {
-                    private long time = System.currentTimeMillis();
-                    private long ftime = time;
-
-                    @Override
-                    public void onProgress(Progress progress) {
-                        long currentTimeMillis = System.currentTimeMillis();
-
-                        statusInfo.setStatus(DownloadTaskService.STATUS_ING);
-                        statusInfo.setFileDownloadedSize(progress.currentBytes / 1024f / 1024);
-                        statusInfo.setFileTotalSize(progress.totalBytes / 1024f / 1024);
-                        statusInfo.setDownloadPgrs((int) (progress.currentBytes * 100f / progress.totalBytes));
-                        statusInfo.setDownloadSpeed(progress.currentBytes * 1000f / 1024 / 1024 / (currentTimeMillis - ftime));
-
-                        if (currentTimeMillis - time > 1000 || progress.currentBytes == progress.totalBytes) {
-                            float totalTime = (currentTimeMillis - ftime) / 1000.0f;
-                            System.out.println((progress.currentBytes / 1024 / 1024 / totalTime) + " progress = " + progress.currentBytes + ",total = " + progress.totalBytes);
-                            time = currentTimeMillis;
-                            EventBus.getDefault().post(statusInfo);
-                        }
-                    }
-                });
-        downloadRequest.setTag(downLoadInfo.getMDownloadUrl());
-        statusInfo.setDownloadId(downloadRequest.start(new OnDownloadListener() {
-            @Override
-            public void onDownloadComplete() {
-                statusInfo.setStatus(DownloadTaskService.STATUS_FINISH);
-                EventBus.getDefault().post(statusInfo);
-            }
-
-            @Override
-            public void onError(Error error) {
-//                if(error.isConnectionError()){
-//                    PRDownloader.resume(statusInfo.getDownloadId());
-//                    return;
-//                }
-                statusInfo.setStatus(DownloadTaskService.STATUS_FAIL);
-                statusInfo.setMessage(error.toString());
-                EventBus.getDefault().post(statusInfo);
-            }
-        }));
+        DownloadTarget task = Aria.download(KFZSApp.getInstance()).load(downLoadInfo.getMDownloadUrl());
+        String filePath = DIR+ File.separator+downLoadInfo.getMPackageName()+ ClassFileHelper.FILE_SUFFIX;
+        task.setFilePath(filePath).start();
     }
 
     public void pause(DownLoadInfo downLoadInfo) {
-        if (downLoadInfo.getMDownloadTaskId() != null)
-            PRDownloader.pause(downLoadInfo.getMDownloadTaskId());
+        DownloadTarget task = Aria.download(KFZSApp.getInstance()).load(downLoadInfo.getMDownloadUrl());
+        task.stop();
     }
 
     public void cancel(DownLoadInfo downLoadInfo) {
-        if (downLoadInfo.getMDownloadTaskId() != null)
-            PRDownloader.cancel((int) downLoadInfo.getMDownloadTaskId());
+        DownloadTarget task = Aria.download(KFZSApp.getInstance()).load(downLoadInfo.getMDownloadUrl());
+        task.stop();
+        task.cancel(true);
+        task.removeRecord();
     }
 
 }

+ 1 - 2
app/src/main/java/com/sheep/gamegroup/util/CommonUtil.java

@@ -108,7 +108,7 @@ public class CommonUtil {
     /**
      * 添加下载
      */
-    public DownLoadInfo addNewDownloadTask(DownloadTaskService mDownloadTaskService, String gameName, String downloadUrl, String packageName,
+    public DownLoadInfo addNewDownloadTask(String gameName, String downloadUrl, String packageName,
                                            int versionCode, String iconUrl, String size, Integer gameId,int whereFrom) {
 
         DownLoadInfo task = new DownLoadInfo();
@@ -121,7 +121,6 @@ public class CommonUtil {
         task.setMGameID(gameId);
         task.setWhereFrom(whereFrom);
         task.setMApkPath(ClassFileHelper.DIR + File.separator + packageName + ClassFileHelper.FILE_SUFFIX);
-//        mDownloadTaskService.addDownloadTask(task);
         return task;
     }
 }

+ 112 - 179
app/src/main/java/com/sheep/gamegroup/view/activity/DialogActivity.java

@@ -3,8 +3,6 @@ package com.sheep.gamegroup.view.activity;
 import android.app.Activity;
 import android.os.Build;
 import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
 import android.support.annotation.Nullable;
 import android.support.annotation.RequiresApi;
 import android.text.TextUtils;
@@ -18,12 +16,15 @@ import android.widget.TextView;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.arialyy.annotations.Download;
+import com.arialyy.aria.core.Aria;
+import com.arialyy.aria.core.download.DownloadTarget;
+import com.arialyy.aria.core.download.DownloadTask;
+import com.arialyy.aria.core.inf.IEntity;
 import com.bumptech.glide.Glide;
 import com.bumptech.glide.request.RequestOptions;
-import com.kfzs.duanduan.bean.DownloadStatus;
 import com.kfzs.duanduan.datashare.provider.download.DownLoadInfo;
 import com.kfzs.duanduan.event.BigEvent;
-import com.kfzs.duanduan.event.EventDownloadHandler;
 import com.kfzs.duanduan.event.EventTypes;
 import com.kfzs.duanduan.services.DownloadTaskService;
 import com.sheep.gamegroup.di.components.DaggerTaskDialogComponent;
@@ -33,22 +34,22 @@ import com.sheep.gamegroup.model.entity.TaskEty;
 import com.sheep.gamegroup.model.entity.TaskState;
 import com.sheep.gamegroup.presenter.TaskDialogContract;
 import com.sheep.gamegroup.presenter.TaskDialogPresenter;
-import com.sheep.gamegroup.util.CommonUtil;
 import com.sheep.gamegroup.util.DeviceUtil;
 import com.sheep.gamegroup.util.Jump2View;
 import com.sheep.gamegroup.util.MyListview;
-import com.sheep.gamegroup.util.NetUtil;
 import com.sheep.gamegroup.util.UMConfigUtils;
 import com.sheep.gamegroup.view.adapter.TaskStateAdapter;
 import com.sheep.gamegroup.view.adapter.TryMakeMoneyAdp;
 import com.sheep.jiuyan.samllsheep.R;
 import com.sheep.jiuyan.samllsheep.SheepApp;
+import com.sheep.jiuyan.samllsheep.utils.ClassFileHelper;
 import com.sheep.jiuyan.samllsheep.utils.G;
 import com.sheep.jiuyan.samllsheep.utils.PackageUtil;
 
+
 import org.greenrobot.eventbus.EventBus;
-import org.greenrobot.eventbus.Subscribe;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -58,7 +59,7 @@ import butterknife.BindView;
 import butterknife.ButterKnife;
 import butterknife.OnClick;
 
-;import static com.kfzs.duanduan.services.DownloadTaskService.STATUS_ING;
+import static com.sheep.jiuyan.samllsheep.utils.ClassFileHelper.DIR;
 
 /**
  * 弹框activity
@@ -99,79 +100,18 @@ public class DialogActivity extends Activity implements TaskDialogContract.View
     @Inject
     TaskDialogPresenter preference;
 
-    Handler handler = new Handler(){
-        @Override
-        public void handleMessage(Message msg) {
-            super.handleMessage(msg);
-            switch (msg.what){
-                case 0:
-                    task_entity.setRunTask(1);
-                    setBtnState();
-                    break;
-                case 1://下载中
-                    if(msg.obj instanceof DownloadStatus){
-                        DownloadStatus downloadStatus = (DownloadStatus) msg.obj;
-                        start_task_tv.setText((int) (downloadStatus.getFileDownloadedSize()*100/downloadStatus.getFileTotalSize() ) + "%");
-                    }
-
-                    break;
-                 case 3://安装apk
-
-                     if(PackageUtil.isAppInstalled(activity, task_entity.getPackage_names())){
-                        if(task_entity.getTask_type() != 3){
-                             start_task_tv.setText("打开应用");
-                         }else {
-                            start_task_tv.setText("开始试玩");
-                        }
-
-                         type = 1;
-                     }
-                     else{
-//                         PackageUtil.installApk(activity, downLoadInfo.getMApkPath()+"");
-                         start_task_tv.setText("开始安装");
-                         type = 3;
-                     }
-                     new Thread(){
-                         @Override
-                         public void run() {
-                             super.run();
-                             try {
-                                 JSONObject jsonObject = new JSONObject();
-                                 jsonObject.put("device_id",DeviceUtil.getDeviceId(SheepApp.mContext)+"");
-                                 jsonObject.put("id",downLoadInfo.getMGameID());
-                                 NetUtil.getNetUtil().sendAppDownload(activity, jsonObject);
-
-                             } catch (Exception e) {
-                                 e.printStackTrace();
-                             }
-                         }
-                     }.start();
-                     break;
-                case 4://被删除,重新下载
-
-                    setBtnState();
-                    break;
-                case 5://被删除,重新下载
-
-                    start_task_tv.setText("继续下载");
-                    break;
-            }
-        }
-    };
-
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.download_item_dialog);
         ButterKnife.bind(this);
-        EventBus.getDefault().register(this);
         activity = this;
 
-        mDownloadTaskService = new DownloadTaskService(this);
-        mDownloadTaskService.restoreDownloadTaskStatus();
-
         initViews();
         initDatas();
+        Aria.download(this).register();
+        mDownloadTaskService = new DownloadTaskService(this);
+        downLoadInfo = mDownloadTaskService.getDownloadTaskByUrl(task_entity);
     }
 
     private void initDatas() {
@@ -184,9 +124,6 @@ public class DialogActivity extends Activity implements TaskDialogContract.View
         dialogItemSizeTv.setText( task_entity.getPackage_size() + "M");
         isDownLoad = PackageUtil.isAppInstalled(SheepApp.mContext, task_entity.getPackage_names());
 
-
-        setBtnState();
-
         //Todo ok
         JSONObject jsonObject = new JSONObject();
         jsonObject.put("id",task_entity.getRelease_task_id());
@@ -194,6 +131,12 @@ public class DialogActivity extends Activity implements TaskDialogContract.View
 
     }
 
+    @Override
+    protected void onResume() {
+        super.onResume();
+        setBtnState();
+    }
+
     private void initViews() {
 
         task_entity = (TaskEty) getIntent().getSerializableExtra("task_entity");
@@ -248,6 +191,8 @@ public class DialogActivity extends Activity implements TaskDialogContract.View
      * 开始任务或者下载游戏、试玩
      */
     private void startStask() {
+        DownloadTarget task = Aria.download(this).load(task_entity.getDownload_link());
+        String filePath = DIR+ File.separator+task_entity.getPackage_names()+ ClassFileHelper.FILE_SUFFIX;
         try{
             switch (type){
                 case 0://开始任务
@@ -262,24 +207,17 @@ public class DialogActivity extends Activity implements TaskDialogContract.View
                     toTestPlay();
                     break;
                 case 2://开始下载
-//                    downLoadApk();
-                    if(downLoadInfo.getMStatus()!= STATUS_ING){
-                        if(NetUtil.isMobile(activity)){
-//                            DialogAccountAbnormal.showDialog(activity,null, "当前网络处于非WIFI状态,确定下载吗?", "取消", "确定" ).show();
-                            Jump2View.getInstance().goNoticeAct(activity, null);
-                            return;
-                        }
-                        //Todo 合并下载模块t
-//                        startFiler();
-                        mDownloadTaskService.start(downLoadInfo);
-                        start_task_tv.setText("下载中");
-                    }else {
-                        mDownloadTaskService.pause(downLoadInfo);
-                        type = 2;
+                    if(task.getTaskState() == IEntity.STATE_RUNNING){
+                        task.stop();
+                    } else if(task.getTaskState() == IEntity.STATE_FAIL){
+                        task.cancel(true);
+                        task.reStart();
+                    } else {
+                        task.setFilePath(filePath);
+                        task.start();
                     }
-
+                    mDownloadTaskService.addDownloadTask(downLoadInfo);
                     break;
-
                 case 3://开始安装
                     isDownLoad = PackageUtil.isAppInstalled(SheepApp.mContext, task_entity.getPackage_names());
                     if(isDownLoad){
@@ -292,12 +230,12 @@ public class DialogActivity extends Activity implements TaskDialogContract.View
                         toTestPlay();
                         return;
                     }else if(!TextUtils.isEmpty(PackageUtil.isExistsFile(activity, task_entity.getPackage_names(), ""))){
-                        PackageUtil.installApk(activity, downLoadInfo.getMApkPath()+"");
+                        PackageUtil.installApk(activity, filePath);
                     }else{
-                        downLoadInfo.setMStatus(4);
-                        downLoadInfo.setMDownloadTaskId(null);
+                        task.resetState();
+                        task.setFilePath(filePath);
+                        task.start();
                         type = 2;
-                        startStask();
                     }
                     break;
                 case 4:
@@ -321,17 +259,6 @@ public class DialogActivity extends Activity implements TaskDialogContract.View
      * 按钮状态
      */
     private void setBtnState(){
-        downLoadInfo = mDownloadTaskService.getDownloadTaskByUrl(task_entity.getDownload_link());
-        if(downLoadInfo == null){
-            downLoadInfo = CommonUtil.getInstance()
-                .addNewDownloadTask(mDownloadTaskService, task_entity.getTask_name(), task_entity.getDownload_link(), task_entity.getPackage_names(),
-                        Build.VERSION.SDK_INT, task_entity.getIcon(), task_entity.getPackage_size(),task_entity.getAcceptedTaskId(), 1);
-
-        }
-//        if(downLoadInfo.getMGameID() == null || downLoadInfo.getMGameID() == 0){
-//            downLoadInfo.setMGameID(task_entity.getAcceptedTaskId());
-//            mDownloadTaskService.addDownloadTask(downLoadInfo);
-//        }
         type = 0;
         if(task_entity.getRunTask() == 0){//开始任务
             buttonStr = "开始任务";
@@ -345,38 +272,45 @@ public class DialogActivity extends Activity implements TaskDialogContract.View
             if(isDownLoad && task_entity.getTask_type() != 3){
                 buttonStr = "开始试玩";
                 type = 1;
-            }else if(mDownloadTaskService.isDownloadExists(task_entity.getDownload_link())){
-                //status 0 init  1 fail 2 donwloading  3 finish  4 paused  5  delete
-                switch (downLoadInfo.getMStatus()){
-                    case 2:
-                        buttonStr = "";
-                        type = 2;
+            } else {
+                type = 2;
+                DownloadTarget task = Aria.download(this).load(task_entity.getDownload_link());
+                String filePath = DIR+ File.separator+task_entity.getPackage_names()+ ClassFileHelper.FILE_SUFFIX;
+                int taskState = task.getTaskState();
+                switch (taskState){
+                    case IEntity.STATE_RUNNING:
+                        buttonStr = task.getPercent() +"%";
                         break;
-                    case 3:
-                        if(TextUtils.isEmpty(downLoadInfo.getMApkPath())){
-                            buttonStr = "开始下载";
-                            type = 2;
-                        }else{
+                    case IEntity.STATE_STOP:
+                        buttonStr = "继续下载";
+                        break;
+//                    case IEntity.STATE_WAIT:
+//                        task.setFilePath(filePath);
+//                        task.start();
+//                        mDownloadTaskService.addDownloadTask(downLoadInfo);
+//                        buttonStr = task.getPercent() +"%";
+//                        break;
+                    case IEntity.STATE_COMPLETE:
+                        isDownLoad = PackageUtil.isAppInstalled(SheepApp.mContext, task_entity.getPackage_names());
+                        if(isDownLoad){
+                            buttonStr = "开始试玩";
+                            type = 1;
+                        }else if(!TextUtils.isEmpty(PackageUtil.isExistsFile(activity, task_entity.getPackage_names(), ""))){
                             buttonStr = "开始安装";
                             type = 3;
+                        }else{
+                            task.resetState();
+                            buttonStr = "开始下载";
                         }
-
                         break;
-                    case 4:
-                        buttonStr = "继续下载";
-                        type = 2;
+                    case IEntity.STATE_FAIL:
+                        buttonStr = "下载失败";
                         break;
                     default:
                         buttonStr = "开始下载";
-                        type = 2;
-
                         break;
                 }
             }
-            else {
-                buttonStr = "开始下载";
-                type = 2;
-            }
         }
         start_task_tv.setText(buttonStr);
     }
@@ -390,7 +324,8 @@ public class DialogActivity extends Activity implements TaskDialogContract.View
         try{
             BaseMessage baseMessage = (BaseMessage) o;
             if(baseMessage.getCode() == 200){
-                handler.sendEmptyMessage(0);
+                task_entity.setRunTask(1);
+                setBtnState();
                 G.showToast("接收任务成功");
             }
             EventBus.getDefault().post(new BigEvent().setEventTypes(EventTypes.ONFRESH_TRYMAKEMANY_PAGE));
@@ -434,65 +369,63 @@ public class DialogActivity extends Activity implements TaskDialogContract.View
 
     }
 
-    @Override
-    protected void onDestroy() {
-        super.onDestroy();
-        EventBus.getDefault().unregister(this);
+    @Download.onPre void onPre(DownloadTask task) {
+        if(task.getKey().equals(task_entity.getDownload_link())) {
+            start_task_tv.setText("准备下载中");
+        }
     }
-
-    @Subscribe
-    public void onEventMainThread(BigEvent event){
-        switch (event.getEventTypes()){
-            case DIALOG_ACTIVITY_DOWNLOAD_FILE:
-                if(task_entity != null){
-                    downLoadInfo = mDownloadTaskService.getDownloadTaskByUrl(task_entity.getDownload_link());
-                    mDownloadTaskService.start(downLoadInfo);
-                    start_task_tv.setText("下载中");
-                }
-                break;
+    @Download.onTaskStart void taskStart(DownloadTask task) {
+        if(task.getKey().equals(task_entity.getDownload_link())) {
+            start_task_tv.setText("开始下载中");
+        }
+    }
+    @Download.onTaskResume void taskResume(DownloadTask task) {
+        if(task.getKey().equals(task_entity.getDownload_link())) {
+            start_task_tv.setText("恢复下载中");
+        }
+    }
+    //在这里处理任务执行中的状态,如进度进度条的刷新
+    @Download.onTaskRunning protected void running(DownloadTask task) {
+        if(task.getKey().equals(task_entity.getDownload_link())) {
+            int p = task.getPercent();    //任务进度百分比
+            mDownloadTaskService.setDownloadTaskPercent(p, task.getCurrentProgress()/1024d/1024d,task.getFileSize()/1024d/1024d,0,task.getKey());
+            String speed = task.getConvertSpeed();    //转换单位后的下载速度,单位转换需要在配置文件中打开
+            long speed1 = task.getSpeed(); //原始byte长度速度
+            start_task_tv.setText(p + "%");
+            System.out.println("Aria p " + p + ", speed = " + speed);
         }
     }
 
-    @Subscribe
-    public void onEventMainThread(final DownloadStatus info) {
-        if(task_entity.getDownload_link().equals(info.getDownloadUrl())){
-            downLoadInfo = mDownloadTaskService.getDownloadTaskByUrl(task_entity.getDownload_link());
-            EventDownloadHandler.newInstance(this, new EventDownloadHandler.OnDownCallback() {
-                @Override
-                public void downloading(String url, Integer progress) {
-                    Message message = new Message();
-                    message.obj = info;
-                    message.what = 1;
-                    handler.sendMessage(message);
-                }
-
-                @Override
-                public void downloadFinish(String downloadUrl) {
-                    downLoadInfo.setMApkPath(info.getApkPath()+"");
-                    downLoadInfo.setMStatus(3);
-                    mDownloadTaskService.addDownloadTask(downLoadInfo);
-                    handler.sendEmptyMessage(3);
-                }
+    @Download.onTaskStop void taskStop(DownloadTask task) {
+        if(task.getKey().equals(task_entity.getDownload_link())) {
+            mDownloadTaskService.setDownloadTaskStatus(task.getKey(), DownloadTaskService.STATUS_PAUSE);
+            start_task_tv.setText("继续下载");
+        }
+    }
 
-                @Override
-                public void downloadPause(String downloadUrl) {
-                    handler.sendEmptyMessage(5);
-                }
+    @Download.onNoSupportBreakPoint void onNoSupportBreakPoint(DownloadTask task) {
+    }
 
-                @Override
-                public void downloadFail(String url) {
-                    downLoadInfo.setMDownloadTaskId(null);
-                    downLoadInfo.setMStatus(1);
-                    mDownloadTaskService.addDownloadTask(downLoadInfo);
-                    handler.sendEmptyMessage(5);
-                }
+    @Download.onTaskCancel void taskCancel(DownloadTask task) {
+        if(task.getKey().equals(task_entity.getDownload_link())) {
+            mDownloadTaskService.deleteDownloadTaskByDownloadUrl(task.getKey());
+            start_task_tv.setText("已经取消");
+        }
+    }
 
-                @Override
-                public void downloadDelete(String downloadUrl) {
-                    handler.sendEmptyMessage(4);
-                }
-            }).setmTag(activity.getClass().getCanonicalName()).handlDownloadResult(info);
+    @Download.onTaskFail void taskFail(DownloadTask task) {
+        if(task.getKey().equals(task_entity.getDownload_link())) {
+            mDownloadTaskService.setDownloadTaskStatus(task.getKey(), DownloadTaskService.STATUS_FAIL);
+            start_task_tv.setText("下载失败");
         }
     }
 
+    @Download.onTaskComplete void taskComplete(DownloadTask task) {
+        if(task.getKey().equals(task_entity.getDownload_link())) {
+            mDownloadTaskService.setDownloadTaskFinish(task.getKey(), task.getDownloadPath());
+            //在这里处理任务完成的状态
+            start_task_tv.setText("开始安装");
+            type = 3;
+        }
+    }
 }

+ 27 - 2
app/src/main/java/com/sheep/gamegroup/view/adapter/TryMakeMoneyAdp.java

@@ -22,6 +22,9 @@ import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
+import com.arialyy.annotations.Download;
+import com.arialyy.aria.core.Aria;
+import com.arialyy.aria.core.download.DownloadTask;
 import com.bumptech.glide.Glide;
 import com.bumptech.glide.request.RequestOptions;
 import com.kfzs.appstore.utils.adapter.recyclerview.ViewHolder;
@@ -265,7 +268,7 @@ public class TryMakeMoneyAdp extends AdpCommonRecy<RecyleObj> {
             view.setOnLongClickListener(new View.OnLongClickListener() {
                 @Override
                 public boolean onLongClick(View view) {
-                    final String[] items = {"复制", "系统下载", "浏览器下载"};
+                    final String[] items = {"复制", "系统下载", "浏览器下载", "Aria下载", "Aria暂停", "Aria重新开始"};
                     AlertDialog dialog = new AlertDialog.Builder(context).setTitle("请选择操作")
                             .setItems(items, new DialogInterface.OnClickListener() {
 
@@ -281,6 +284,15 @@ public class TryMakeMoneyAdp extends AdpCommonRecy<RecyleObj> {
                                         case "浏览器下载":
                                             debugWebDownload(context, taskEty);
                                             break;
+                                        case "Aria下载":
+                                            debugAriaDownload(context, taskEty);
+                                            break;
+                                        case "Aria暂停":
+                                            debugAriaPause(context, taskEty);
+                                            break;
+                                        case "Aria重新开始":
+                                            debugAriaStart(context, taskEty);
+                                            break;
                                     }
                                 }
                             }).create();
@@ -344,7 +356,6 @@ public class TryMakeMoneyAdp extends AdpCommonRecy<RecyleObj> {
             G.showToast("系统开始下载apk");
         }
     }
-
     private static void debugWebDownload(final Context context, final TaskEty taskEty) {
         if(context instanceof Activity) {
             Intent intent = new Intent();
@@ -355,4 +366,18 @@ public class TryMakeMoneyAdp extends AdpCommonRecy<RecyleObj> {
             G.showToast("浏览器开始下载apk");
         }
     }
+
+    private static void debugAriaDownload(final Context context, final TaskEty taskEty) {
+        Aria.download(context)
+                .load(taskEty.getDownload_link())     //读取下载地址
+                .setFilePath(DIR+File.separator+taskEty.getTask_name()+".apk") //设置文件保存的完整路径
+                .start();   //启动下载
+    }
+    private static void debugAriaPause(final Context context, final TaskEty taskEty) {
+        Aria.download(context).stopAllTask();
+    }
+    private static void debugAriaStart(final Context context, final TaskEty taskEty) {
+        Aria.download(context).resumeAllTask();
+    }
+
 }