#星光计划2.0# 一个按钮实现下载、暂停、取消、显示下载进度操作 原创 精华

dstt_l3
发布于 2021-12-6 16:56
浏览
1收藏

【本文正在参与51CTO HarmonyOS技术社区创作者激励计划-星光计划2.0】

先看效果

开始

#星光计划2.0# 一个按钮实现下载、暂停、取消、显示下载进度操作-鸿蒙开发者社区

暂停

#星光计划2.0# 一个按钮实现下载、暂停、取消、显示下载进度操作-鸿蒙开发者社区

下载中

#星光计划2.0# 一个按钮实现下载、暂停、取消、显示下载进度操作-鸿蒙开发者社区

下载完成

#星光计划2.0# 一个按钮实现下载、暂停、取消、显示下载进度操作-鸿蒙开发者社区

取消下载

#星光计划2.0# 一个按钮实现下载、暂停、取消、显示下载进度操作-鸿蒙开发者社区

开始写代码

PRDownloader 的配置

下载功能使用的是PRDownloader , https://gitee.com/chinasoft_ohos/PRDownloader
首先,在moudle级别下的build.gradle文件中添加依赖

implementation 'com.gitee.chinasoft_ohos:prdownloader:1.0.0'

在config.json中添加互联网许可

  "deviceConfig": {
    "default": {
      "directLaunch": false,
      "network": {
        "cleartextTraffic": true
      }
    }
  }
"reqPermissions": [
      {
        "name": "ohos.permission.INTERNET"
      }
    ]

AbilitySlice的onStart()方法中初始化它。

PRDownloader.initialize(getApplicationContext());

创建一个ProgressBar进度条

布局文件

<ProgressBar
        ohos:id="$+id:progressbar"
        ohos:progress_width="56vp"
        ohos:progress_color="#09f"
        ohos:background_instruct_element="#999"
        ohos:height="60vp"
        ohos:width="320vp"
        ohos:min="0"
        ohos:progress_hint_text="开始下载"
        ohos:progress_hint_text_color="#fff"/>

ProgressBar的点击事件

progressBar.setClickedListener(new Component.ClickedListener() {
            @Override
            public void onClick(Component component) {
                if (downloadId == 0){
                    new ToastDialog(getContext()).setText("开始下载").show();
                    downloadId = PRDownloader.download(url,path,name)
                            .build()
                            // 恢复下载
                            .setOnStartOrResumeListener(new OnStartOrResumeListener() {
                                @Override
                                public void onStartOrResume() {
                                    progressBar.setProgressHintText("正在下载");
                                }
                            })
                            //暂停下载
                            .setOnPauseListener(new OnPauseListener() {
                                @Override
                                public void onPause() {
                                    progressBar.setProgressHintText("恢复下载");
                                }
                            })
                            // 取消下载
                            .setOnCancelListener(new OnCancelListener() {
                                @Override
                                public void onCancel() {
                                    progressBar.setProgressHintText("已取消下载");
                                }
                            })
                            // 下载进程  currentBytes当前下载字节,totalBytes文件总字节。
                            .setOnProgressListener(new OnProgressListener() {
                                @Override
                                public void onProgress(Progress progress) {
                                    long currentBytes = progress.currentBytes;
                                    long totalBytes = progress.totalBytes;
                                    progressBar.setMaxValue((int)totalBytes);
                                    progressBar.setProgressValue((int)currentBytes);
                                    progressBar.setProgressHintText(new SizeUtil().getPrintSize(currentBytes) + "/" + new SizeUtil().getPrintSize(totalBytes));
                                }
                            })
                            .start(new OnDownloadListener() {
                                @Override
                                public void onDownloadComplete() {
                                    progressBar.setProgressHintText("下载完成");
                                    status = PRDownloader.getStatus(downloadId);
                                    text.setText(status.name());
                                }

                                @Override
                                public void onError(Error error) {
                                    progressBar.setProgressHintText("下载出错");
                                    downloadId = 0;
                                    text.setText(error.getServerErrorMessage());
                                }
                            });
                    status = PRDownloader.getStatus(downloadId);
                    text.setText(status.name());
                    //QUEUED RUNNING 下载中
                }else if (status.name().equals("QUEUED") || status.name().equals("RUNNING")){
                    PRDownloader.pause(downloadId);
                    new ToastDialog(getContext()).setText("暂停下载").show();
                    status = PRDownloader.getStatus(downloadId);
                    text.setText(status.name());
                    // PAUSED  暂停
                }else if(status.name().equals("PAUSED")){
                    PRDownloader.resume(downloadId);
                    new ToastDialog(getContext()).setText("恢复下载").show();
                    status = PRDownloader.getStatus(downloadId);
                    text.setText(status.name());
                    // 已完成下载
                }else if(progressBar.getProgressHintText().equals("下载完成")){
                    text.setText("已下载完成,存储路径:\n" + path);
                }
            }
        });

取消下载的操作

因为需要在一个按钮上实现所以操作,所以取消使用长按来实现

progressBar.setLongClickedListener(new Component.LongClickedListener() {
            @Override
            public void onLongClicked(Component component) {
                new ToastDialog(getContext()).setText("取消下载").show();
                PRDownloader.cancel(downloadId);
                downloadId = 0;
                progressBar.setProgressValue(0);
                progressBar.setProgressHintText("开始下载");
                status = PRDownloader.getStatus(downloadId);
                text.setText(status.name());
            }
        });

OK

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
DownLoad.zip 1.13M 16次下载
1
收藏 1
回复
举报
回复
    相关推荐