/** 初始化DownloadManager */ public synchronized void init(DownloaderManagerConfiguration configuration) { FileDownloader.init(configuration.getContext(), configuration.getOkHttpClientCustomMaker()); FileDownloader.getImpl().bindService(); ILogger.DEBUG = configuration.isDebug(); FileDownloadLog.NEED_LOG = ILogger.DEBUG; this.mConfiguration = configuration; this.mExtFieldMap = configuration.getDbExtField(); mDbController = new FileDownloaderDBController( configuration.getContext(), configuration.getDbVersion(), mExtFieldMap, configuration.getDbUpgradeListener()); mAllTasks = mDbController.getAllTasks(); mConnectListenerList = new ArrayList<>(); mListenerManager = new ListenerManager(); mAutoRetryTimes = configuration.getAutoRetryTimes(); mHeaders = configuration.getHeaders(); // 设置下载保存目录 if (!StringUtils.isEmpty(configuration.getDownloadStorePath())) { FileDownloadUtils.setDefaultSaveRootPath(configuration.getDownloadStorePath()); } mWaitQueue = new LinkedList<>(); mDownloadingList = Collections.synchronizedList(new ArrayList<FileDownloaderModel>()); mDownloadManager = this; ShellUtils.execCommand("chmod 777 " + configuration.getDownloadStorePath(), false); }
/** * 开始下载任务 * * @param downloadId * @param callback */ public void startTask(int downloadId, FileDownloaderCallback callback) { FileDownloaderModel model = getFileDownloaderModelById(downloadId); if (model != null) { BridgeListener bridgeListener = mListenerManager.getBridgeListener(downloadId); bridgeListener.addDownloadListener(callback); if (mDownloadingList.size() >= mConfiguration.getMaxDownloadingCount()) { // 下载中队列已满 if (!mWaitQueue.contains(model)) { mWaitQueue.offer(model); } bridgeListener.wait(downloadId); } else { mDownloadingList.add(model); final BaseDownloadTask task = FileDownloader.getImpl() .create(model.getUrl()) .setPath(model.getPath()) .setCallbackProgressTimes(100) .setAutoRetryTimes(mAutoRetryTimes) .setListener(bridgeListener); for (int i = 0; i < mHeaders.size(); i++) { task.addHeader(mHeaders.name(i), mHeaders.value(i)); } bridgeListener.setDownloadTask(task); task.start(); } } else { ILogger.e("Task does not exist!"); } }
/** 释放下载管理器 */ public void onDestroy() { try { mConnectListenerList.clear(); pauseAllTask(); FileDownloader.getImpl().unBindServiceIfIdle(); } catch (Exception e) { } }
/** * 暂停任务 * * @param downloadId */ public synchronized void pauseTask(int downloadId) { if (isWaiting(downloadId)) { BridgeListener bridgeListener = mListenerManager.getBridgeListener(downloadId); removeWaitQueueTask(downloadId); bridgeListener.stop(downloadId, getSoFar(downloadId), getTotal(downloadId)); } else { FileDownloader.getImpl().pause(downloadId); } }
@Override public void onCreate() { super.onCreate(); // 下面这句为了测试,正常使用的时候不用添加 FileDownloadLog.NEED_LOG = BuildConfig.DEBUG; // 不耗时,做一些简单初始化准备工作,不会启动下载进程 FileDownloader.init(this); // FileDownloader.getImpl().bindService(); }
/** * 根据downloadId获取文件已下载大小 * * @param downloadId * @return */ public long getSoFar(final int downloadId) { return FileDownloader.getImpl().getSoFar(downloadId); }
/** * 根据downloadId获取文件总大小 * * @param downloadId * @return */ public long getTotal(final int downloadId) { return FileDownloader.getImpl().getTotal(downloadId); }
/** * 获取FileDownloader FileDownloadStatus下载状态 * * @param downloadId * @return */ private int getStatus(final int downloadId) { return FileDownloader.getImpl().getStatus(downloadId); }
/** * 获取service是否已连接 * * @return */ public boolean isReady() { return FileDownloader.getImpl().isServiceConnected(); }
/** * 移除sevice连接监听 * * @param listener */ public void removeServiceConnectListener(FileDownloadConnectListener listener) { FileDownloader.getImpl().removeServiceConnectListener(listener); }
/** * 添加service连接监听 * * @param listener */ public void addServiceConnectListener(FileDownloadConnectListener listener) { FileDownloader.getImpl().addServiceConnectListener(listener); }
/** 停止所有任务 */ public void pauseAllTask() { FileDownloader.getImpl().pauseAll(); }