一、Android Download Manager简介
Android Download Manager是Android系统从API level 9 (Android 2.3)开始提供的全局下载器。它是一个系统级组件,可以为多个应用提供下载功能,并提供了一些高级的下载功能。使用ADN可以方便地管理下载任务,包括创建下载任务、暂停任务、恢复任务等。ADN是Google官方推荐的一种下载解决方案。
二、Android Download Manager的优点
1. 多线程下载:Android Download Manager可以根据网络条件和手机性能,自动选择最佳的下载方案,支持同时下载多个任务,提高下载效率。
2. 断点续传:Android Download Manager支持断点续传功能,当网络中断或应用退出时,可以从中断的地方继续下载,避免了重复下载。
3. 自动重试:当下载任务失败时,Android Download Manager会尝试自动重试,提高下载成功率。
4. 安全可靠:Android Download Manager提供了安全机制,自动筛选可信的下载源,保证下载的文件安全可靠。
三、Android Download Manager的使用
1. 添加权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
需要添加网络和SD卡写权限。
2. 创建下载请求
DownloadManager.Request request = new DownloadManager.Request(Uri.parse("fileUrl"));
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);
request.setAllowedOverRoaming(false);
request.setTitle("fileTitle");
request.setDescription("fileDescription");
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);
request.setMimeType("fileMimeType");
long downloadId = downloadManager.enqueue(request);
其中,fileUrl为下载文件的URL地址,fileTitle为下载文件的标题,fileDescription为下载文件的描述,fileMimeType为下载文件的MIME类型,downloadManager为DownloadManager的实例,通过getSystemService(Context.DOWNLOAD_SERVICE)获取。
3. 注册广播接收器
DownloadManagerReceiver receiver = new DownloadManagerReceiver();
registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
需要创建广播接收器DownloadManagerReceiver,继承BroadcastReceiver类,实现onReceive()方法。
4. 处理下载完成事件
public class DownloadManagerReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE)) {
long downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterById(downloadId);
Cursor cursor = downloadManager.query(query);
if(cursor.moveToFirst()) {
int status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS));
if(status == DownloadManager.STATUS_SUCCESSFUL) {
String localUri = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
//do something with localUri
}
}
cursor.close();
}
}
}
当下载完成时,Android Download Manager会发送一条广播DownloadManager.ACTION_DOWNLOAD_COMPLETE,需要在广播接收器中处理该事件。通过下载任务的ID获取下载任务的详细信息,包括下载状态、本地存储路径等。
5. 取消下载任务
downloadManager.remove(downloadId);
取消下载任务的方法是DownloadManager.remove(downloadId),其中downloadId为任务的ID。