Android下载工具原生HTTP

一、添加引用

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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

相关阅读更多精彩内容

友情链接更多精彩内容