中国优质的IT技术网站
专业IT技术创作平台
IT职业在线教育平台
【本文正在参与51CTO HarmonyOS技术社区创作者激励计划-星光计划2.0】
下载功能使用的是PRDownloader , https://gitee.com/chinasoft_ohos/PRDownloader 首先,在moudle级别下的build.gradle文件中添加依赖
PRDownloader
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()方法中初始化它。
AbilitySlice
PRDownloader.initialize(getApplicationContext());
<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.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()); } });
微信扫码分享