Android利用DownloadManager实现文件下载

Android中文件下载,app更新,我们一般利用的都是 Retrofit或者 Okhttp等实现,但其实Android 早在API 9之后,就为我们提供了DownLoadManager,这是Android提供的系统服务,通过这个服务下载文件,整个过程全部交给了系统负责,免去了我们别的操作。
【Android利用DownloadManager实现文件下载】下面我们就来实地演示一下操作。

测试api sdk28, Android Studio3.4 小米5s Plus
代码如下:
//定义一个成功接口
public interface IDownloadlister {void success(Uri uri); }

工具类,重要的代码我已经移动上来。
/** * 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() {@Overridepublic void onReceive(Context context, Intent intent) {//获取下载idlong myDwonloadID = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1); if (myDwonloadID == id) {//获取下载uriUri uri = downloadManager.getUriForDownloadedFile(myDwonloadID); lister.success(uri); }}}; if (context instanceof Activity) {Activity activity = (Activity) context; activity.registerReceiver(receiver, filter); }}//测试url,下载链接private String url = "http://xx.xxx.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"; //Contextprivate 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; }}

使用时,这里下载了个app
DownloadUtils.builder().setContext(this).setLister(new IDownloadlister() {@Overridepublic 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实现文件下载
文章图片

很简单吧,关于更多的操作,比如下载进度,DownloadManager并没有提供具体方法,不过我们可以通过定时获取已下载大小,然后计算相应的进度值。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    推荐阅读