Giter Site home page Giter Site logo

xwdz / quietdownload Goto Github PK

View Code? Open in Web Editor NEW
52.0 3.0 9.0 13.29 MB

🔥下载可以很简单。单任务下载、多任务下载、暂停全部任务、自动恢复下载、断点续传、任何一个界面监听进度等

Java 100.00%
download filedownload downloadmanager download-file download-apk multidownload multidownloadapk

quietdownload's Introduction

QuiteDownload

如果你觉得这个lib对你有用,随手给个Star,让我知道它是对你有帮助的,我会继续更新和维护它。

image

功能

  • 任何一个界面检测进度
  • 单个任务下载
  • 多个任务下载
  • 取消单个任务
  • 取消全部任务
  • 暂停所有任务
  • 支持队列
  • 队列最大同时下载任务数,超过则进入等待队列
  • 自动恢复上一次下载任务

使用方法

downloader 权限相关

    <uses-permission android:name="android.permission.INTERNET"/>

添加依赖

根项目的build.gradle:

allprojects {
    repositories {
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

$lastVersion =

implementation 'com.j256.ormlite:ormlite-android:4.48'
implementation 'com.xwdz:QuietDownloader:$lastVersion'

配置

1. 在您的Application处调用初始化代码:

    DownloadConfig downloadConfig = new DownloadConfig(this);
    
    // 自定义配置 均有默认值
    
    // downloadConfig.setMaxDownloadTasks(); 队列最大同时下载任务数,超过则进入等待队列 默认:3
    // downloadConfig.setMaxDownloadThreads() 最大线程下载数   默认:3
    // downloadConfig.setDownloadDir() 下载文件路径
        ...省略若干
    
   QuietDownloader.initializeDownloader(downloadConfig);

DownloadEntry.Status的几种状态

状态 说明
IDLE 空闲
WAITING 等待
CONNECTING 连接
CONNECT_SUCCESSFUL 连接成功
DOWNLOADING 开始下载
PAUSED 暂停
CANCELLED 取消
COMPLETED 完成
ERROR 发生错误

使用方法


private final DownloadEntry downloadEntry = new DownloadEntry("url","name");

QuietDownloader.download(downloadEntry)
  ... 省略代码
  
常用静态方法 参数 说明
download downloadEntry 下载一个任务
pause downloadEntry 在听一个任务
cancel downloadEntry 取消一个任务
resume downloadEntry 恢复一个下载任务
recoverAll 恢复所有下载任务
pauseAll 暂停所有任务
queryAll 查询所有下载任务返回一个list
queryById id 查询一个downloadEntry从数据库中
deleteById id 从数据库中删除一个downloadEntry
getDBDao 返回Dao<DownloadEntry, String>自定义进行数据查询

......

监听

QuietDownloader 并没有采用传统listener方式,而是使用了观察者模式,如需要在某个界面监听下载进度

    private final DataUpdatedWatcher mDataUpdateReceiver = new DataUpdatedWatcher() {
        @Override
        public void notifyUpdate(DownloadEntry entry) {
            // calback mainUIThread 
            // do something
            // 可根据 entry status来判断一些列状态
            if(entry.status == DownloadEntry.pause || DownloadEntry.downloading ...)
        }
    };
    
    // 省略若干代码
    
    //监听下载状态
    @Override
    protected void onResume() {
        super.onResume();
        QuietDownloader.addObserver(mDataUpdateReceiver);
    }
    
    @Override
    protected void onPause() {
        super.onPause();
        QuietDownloader.removeObserver(mDataUpdateReceiver);
    }
    

关于DownloadEntry

public class DownloadEntry implements Serializable {

    public String id;
    public String name;
    public String url;
    public int currentLength;
    public int totalLength;
        // ... 省略代码

    /**
     * @param url  下载地址
     * @param name 文件名称(带后缀)
     */
    public DownloadEntry(String url, String name) {
        this.url = url;
        this.id = url;
        this.name = name;
        this.filePath = QuietDownloader.getImpl().getConfigs().getDownloadFile(name).getAbsolutePath();
    }
       
    // ... 省略代码
    
    @Override
        public boolean equals(Object o) {
            return o.hashCode() == this.hashCode();
        }
    
        @Override
        public int hashCode() {
            final int PRIME = 31;
            int result = 1;
            result = PRIME * result + id.hashCode();
            return result;
    }
}

注意

  • DownloadEntry 实体类重写其 equals 以及 hashCode 方法,使用其 id hashCode 来作为其标准
  • QuietDownloader 内部使用DownloadEntry实体类进行关联
  • QuietDownEntryname属性最终作为下载文件名称
  • 如果自定义了downloadConfig.setDownloadDir()下载位置注意申请读写权限

TODO

  • 重试机制
  • 拦截器实现

Stargazers


版本历史

v1.0.8-beta

v1.0.61-beta

  • 不再需要声明组件Service
  • 初始化直接可使用静态方法`QuietDownloader.initializeDownloader(downloadConfig);
  • 增加自动重试机制

v1.0.6-beta

  • 内部增加检查当前DownloadEntry.status机制,如果正在下载则忽略事件
  • HTTP增加Connect Header

v1.0.3

  • 新增配置QuietDownloader.setReadTimeoutMillis(),QuietDownloader.setConnTimeMillis

v1.0.2

v1.0.1

  • DownloadConfig提供自定义下载目录
  • Fix Issues3

v0.0.6

  • QuietDownloader 可通过getDBDao()拿到Dao<DownloadEntry, String>对象操作数据库
  • QuietDownloader 提供查询所有方法数据库DownloadEntry queryAll()

v0.0.5

  • 修复默认使用url作为文件名称url长度过长问题

v0.0.4

  • 新增DownloadStatus连接成功CONNECT_SUCCESSFUL枚举

quietdownload's People

Contributors

xwdz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

quietdownload's Issues

SQLException 下载报这个异常

这个是异常信息
(1) no such column: id
: java.sql.SQLException: queryForLong from database failed: SELECT COUNT(*) FROM downloadentry WHERE id = ?
: at com.j256.ormlite.misc.SqlExceptionUtil.create(SqlExceptionUtil.java:22)
: at com.j256.ormlite.android.AndroidDatabaseConnection.queryForLong(AndroidDatabaseConnection.java:242)
: at com.j256.ormlite.stmt.StatementExecutor.ifExists(StatementExecutor.java:603)
: at com.j256.ormlite.dao.BaseDaoImpl.idExists(BaseDaoImpl.java:807)
: at com.j256.ormlite.dao.BaseDaoImpl.createOrUpdate(BaseDaoImpl.java:335)
: at com.xwdz.download.core.DownloadDBManager.newOrUpdate(DownloadDBManager.java:57)
: at com.xwdz.download.core.DataChanger.postNotifyStatus(DataChanger.java:59)
: at com.xwdz.download.core.DownloaderHandler$1.handleMessage(DownloaderHandler.java:67)
: at android.os.Handler.dispatchMessage(Handler.java:103)
: at android.os.Looper.loop(Looper.java:214)
: at android.app.ActivityThread.main(ActivityThread.java:7710)
: at java.lang.reflect.Method.invoke(Native Method)
: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)

下载地址:http://down.s.qq.com/download/1109006800/apk/10039011_com.tencent.hjzqgame.apk

版本: implementation 'com.j256.ormlite:ormlite-android:4.48'
implementation 'com.xwdz:QuietDownloader:1.0.8-beta'

下载问题

作者您好,想问一个关于QuietDownLoad的问题,当最大下载数一个,下载队列添加了10个下载任务,其他9个怎么或得到文件的信息,例如大小,目前使用发现是没有的,只有正在下载的会拿到文件信息

建议

指定网络下载问题

NullPointerException 暂停任务时时出现异常

log信息
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.xwdz.download.core.DownloadThread.isRunning()' on a null object reference
at com.xwdz.download.core.DownloadTaskManager.pause(DownloadTaskManager.java:59)
at com.xwdz.download.core.DownloaderHandler.pauseDownload(DownloaderHandler.java:194)
at com.xwdz.download.core.DownloaderHandler.handler(DownloaderHandler.java:126)
at com.xwdz.download.core._Loader.pause(_Loader.java:95)
at com.xwdz.download.core.QuietDownloader.pause(QuietDownloader.java:56)
at com.tinytiger.titi.widget.view.DownloadProgressView.pauseDownload(DownloadProgressView.kt:223)
at com.tinytiger.titi.widget.view.DownloadProgressView.access$pauseDownload(DownloadProgressView.kt:39)
at com.tinytiger.titi.widget.view.DownloadProgressView$init$1.onClick(DownloadProgressView.kt:102)

DownService

您好 为什么取消在service中下载呢, 还有一个问题就是有的时候一个下载资源 只读取了2000多个字节就直接退出不下载了 而且每次都是那个固定值2181好象是 您这能分析出什么原因吗 换个网络啥的有时候能解决这个问题

文件无法下载

版本 implementation 'com.j256.ormlite:ormlite-android:4.48'
implementation 'com.xwdz:QuietDownloader:1.0.8-beta'

url: http://suo.im/5Sxi3n

使用github上的demo log:
D/xwdz_downloader: [TAG] data:DownloadEntry{id='https://suo.im/5Sxi3n', name='com.tencent.bringyouhome', url='https://suo.im/5Sxi3n', currentLength=0, totalLength=0, status=ERROR, isSupportRange=false, filePath='/storage/emulated/0/Android/data/com.quinn.downloadertest/cache/quietDownloader/com.tencent.bringyouhome'}

概率性bug

有一定概率下载完成之后返回状态为ERROR
第二次才会下载成功

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.