将下载模块通过一个工具类提供给外部。内部首先申请SD卡权限。通过链式调用传入下载地址,保存地址和下载回调函数(开始,进度,完成,取消,失败)。
不可重复下载,通过标志未来判断是否处于下载中。默认保存在外部存储,外部存储不可用则保存在内部缓存目录。
下载操作通过okhttp进行封装。传入请求地址,请求头,添加网络请求拦截器,在下载过程中将Response置换为自定义的能够获取请求进度的Response,然后通过主线程的Handler执行回调函数,进行UI更新。开始,进度,完成,取消,失败等都是使用主线程的Handler执行回调函数。