一、添加引用
implementation 'com.linc.android:http:0.0.03'
二、编写代码
①声明服务连接
private final DownLoadServiceConnection connection = new DownLoadServiceConnection() {
@Override
public void onConnected(DownLoadService.DownloadBinder binder) {
//可以通过binder.getTasksList()获取下载列表
}
@Override
public void onDisConnected() {
//可为空
}
@Override
public void onStarted(DownloadTask task) {
LogUtils.i(getClass().getName() + "开始:" + task.url);
}
@Override
public void onProgress(DownloadTask task) {
}
@Override
public void onPause(DownloadTask task) {
LogUtils.i(getClass().getName() + "已暂停:" + task.url);
}
@Override
public void onFinish(DownloadTask task) {
LogUtils.i(getClass().getName() + "已完成" + task.url);
}
@Override
public void onCancel(DownloadTask task) {
LogUtils.i(getClass().getName() + "已取消" + task.url);
}
@Override
public void onError(DownloadTask task) {
LogUtils.e(getClass().getName() + "错误:" + task.url + "," + task.error);
}
};
②启动或绑定任务
//统一限速 DownLoadService.setLimit(100);
Intent intent = new Intent(activity, DownLoadService.class);
bindService(intent, connection, Context.BIND_AUTO_CREATE);
③页面关闭时,解除绑定
@Override
protected void onDestroy() {
super.onDestroy();
unbindService(connection);
}
温馨提示
最好是去申请相关权限
//权限声明 <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
//权限声明 <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
//权限判断
if (LincCmdHelper.isAccessAllFileNotAllow()) {
TipDialog.create(activity).title("请打开修改系统设置权限").onClickListener(is -> {
if (is) {
LincCmdHelper.openAccessAllFile(activity);
} else {
App.exitOut();
}
}).show();
} else if (!NotifyUtils.isPermissionOK(activity)) {
TipDialog.create(activity).title("请打开通知栏开关").onClickListener(is -> {
if (is) {
openActivity(NotifyUtils.notificationPageIntent(activity));
} else {
App.exitOut();
}
}).show();
} else {
startTaskService();
}
外部操作下载,开始,暂停,取消,删除的方法
//添加任务
connection.binder.addTask(dir, url)
//如果只需要添加到任务,不需要页面渲染,可以直接调用
DownLoadService.addTask(context, savePath, url);
//继续下载
connection.binder.start(taskId);
//暂停下载
connection.binder.pause(taskId);
//取消下载
connection.binder.cancel(taskId);
//删除任务
connection.binder.remove(taskId);
在适配器中的状态如下
//0.无状态;1.下载中;2.下载完成;3.已暂停;4.已取消;5.错误
switch (item.getState()) {
case 0:
//0无状态
break;
case 1:
//1下载中(已下载的文件大小item.file.length(),文件总大小item.fileSize,进度progress,速度speed)
break;
case 2:
//2下载完成
break;
case 3:
//3已暂停
break;
case 4:
//4已取消
break;
case 5:
//下载异常
break;
default:
break;
}