回复
#星光计划2.0# 一个按钮实现下载、暂停、取消、显示下载进度操作 原创 精华
dstt_l3
发布于 2021-12-6 16:56
浏览
1收藏
【本文正在参与51CTO HarmonyOS技术社区创作者激励计划-星光计划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
回复
相关推荐