暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

鸿蒙手机上一个按钮实现下载操作!

鸿蒙技术社区 2021-12-08
295

今天给大家分享在鸿蒙上一个按钮实现下载、暂停、取消、显示下载进度操作。


先看效果,如下图:

开始

暂停

下载中

下载完成

取消下载


开始写代码


①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());
            }
        });

👇扫码报名今晚的鸿蒙直播课👇

👇点击关注鸿蒙技术社区👇
了解鸿蒙一手资讯


求分享

求点赞

求在看

文章转载自鸿蒙技术社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论