gddhy

_(:з」∠)_ 加载中...
  • 主页
  • 归档
  • 工具
  • 关于
所有文章 友链

gddhy

_(:з」∠)_ 加载中...

  • 主页
  • 归档
  • 工具
  • 关于

Android利用DownloadManager实现文件下载

2021-07-31
字数统计:536字 阅读时长≈2分

调用系统下载管理下载文件,安卓API 9以后系统提供

定义一个成功接口

1
2
3
public interface IDownloadlister {
void success(Uri uri);
}

下载工具类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/**
* Created by Petterp
* on 2019-10-26
* Function: 文件下载工具类
*/
public class DownloadUtils {

public void download() {
IntentFilter filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
//创建下载任务,url即任务链接
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
//指定下载路径及文件名
request.setDestinationInExternalPublicDir(FILE_URI, fileName);
//获取下载管理器
final DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
//一些配置
//允许移动网络与WIFI下载
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI);
//是否在通知栏显示下载进度
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);

//设置可见及可管理
/*注意,Android Q之后不推荐使用*/
request.setVisibleInDownloadsUi(true);

//将任务加入下载队列
assert downloadManager != null;
final long id = downloadManager.enqueue(request);
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//获取下载id
long myDwonloadID = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if (myDwonloadID == id) {
//获取下载uri
Uri uri = downloadManager.getUriForDownloadedFile(myDwonloadID);
lister.success(uri);
}
}
};
if (context instanceof Activity) {
Activity activity = (Activity) context;
activity.registerReceiver(receiver, filter);
}
}


//测试url,下载链接
private String url = "http://qn.yingyonghui.com/apk/653732" +
"5/c1d876442e38f2555" +
"d85c55a1d8e95b7?sign=a36530f5c08ffbb5d9e" +
"53c2d50346eb7&t=5db45f8d&attname=c1d876442e" +
"38f2555d85c55a1d8e95b7.apk";
//加.好处是默认隐藏路径
private final String FILE_URI = "/.测试路径/";
private IDownloadlister lister = null;
//文件名
private String fileName = "test";
//Context
private Context context;

public static DownloadUtils builder() {
return new DownloadUtils();
}

public DownloadUtils setUrl(String url) {
this.url = url;
return this;
}

public DownloadUtils setLister(IDownloadlister lister) {
this.lister = lister;
return this;
}


public DownloadUtils setFileName(String fileName) {
this.fileName = fileName;
return this;
}

public DownloadUtils setContext(Context context) {
this.context = context;
return this;
}
}

代码使用

1
2
3
4
5
6
7
8
9
10
11
12
13
DownloadUtils.builder()
.setContext(this)
.setLister(new IDownloadlister() {
@Override
public void success(Uri uri) {

Intent install = new Intent(Intent.ACTION_VIEW);
install.setDataAndType(uri, "application/vnd.android.package-archive");
install.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(install);
}
})
.download();

使用时,需要获取网络权限和储存空间权限

转载自Android利用DownloadManager实现文件下载 - petterp

FILE_URI 使用的目录以内置储存空间为根目录,可直接使用系统下载目录

1
String FILE_URI = "Download";

安卓Q之前可以自定义任意储存空间的文件夹作为下载文件夹使用,Q及之后只能使用安卓存在的公共文件夹

赏

谢谢你请我吃糖果

微信

扫一扫,分享到微信

微信分享二维码
Hexo禁用文章评论
zstermux功能拓展
目录,不存在的…
留言已关闭
:gddhy
© gddhy
Hexo Theme Yilia by Litten
  • 所有文章
  • 友链

tag:

  • Android
  • 软件分享
  • game
  • Hexo
  • JavaScript
  • 旧机博物馆
  • MIUI
  • Java
  • git
  • Termux
  • mtk
  • 原神
  • Win
  • Html
  • 安卓学习笔记

    缺失模块

  • Luminous' Home
  • 影子博客
  • 四次元领域
  • 初之音
  • Mr.Pumpkin
  • ZhaoQuinn 's Blog