专栏名称: 安卓开发精选
伯乐在线旗下账号,分享安卓应用相关内容,包括:安卓应用开发、设计和动态等。
目录
相关文章推荐
51好读  ›  专栏  ›  安卓开发精选

Android 快速实现文件下载(只有4行代码)

安卓开发精选  · 公众号  · android  · 2017-01-13 20:50

正文

(点击 上方公众号 ,可快速关注)

来源:Marno

http://www.jianshu.com/p/46fd1c253701

如有好文章投稿,请点击 → 这里了解详情


写在前面的废话


下载文件,几乎是所有APP都会用到的功能!算了,还是不废话了,直接开写吧。。。


简单使用


完成一个下载任务只需要4行代码,什么断点续传,大文件下载,通知栏进度显示….都不需要你操心。


//创建下载任务,downloadUrl就是下载链接

DownloadManager . Request request = new DownloadManager . Request ( Uri . parse ( downloadUrl ));

//指定下载路径和下载文件名

request . setDestinationInExternalPublicDir ( "/download/" , fileName );

//获取下载管理器

DownloadManager downloadManager = ( DownloadManager ) mContext . getSystemService ( Context . DOWNLOAD_SERVICE );

//将下载任务加入下载队列,否则不会进行下载

downloadManager . enqueue ( request );


高级用法


  • 通过上面的代码大家也看出来了,我们使用的是系统提供的下载管理器进行下载,从API 9就开始支持了,所以不用担心在兼容问题

  • 既然是系统提供的,那么肯定还有更加强大的用法,文章继续


让我们看DownloadManager的源码,提供了这么多方法


DownloadManager的方法


DownloadManager.Request的方法


  • 方法差不多就这些,已经比较全了,可以满足我们绝大部分的使用场景。


实际使用


接下来我们就以APP应用内更新为例,讲一下这些方法的使用

1.首先我们梳理下APP应用内更新的逻辑


APP应用内更新


2.接下来看具体实现,上代码


//使用系统下载器下载

private void downloadAPK ( String versionUrl , String versionName ) {

//创建下载任务

DownloadManager . Request request = new DownloadManager . Request ( Uri . parse ( versionUrl ));

request . setAllowedOverRoaming ( false ); //漫游网络是否可以下载

//设置文件类型,可以在下载结束后自动打开该文件

MimeTypeMap mimeTypeMap = MimeTypeMap . getSingleton ();

String mimeString = mimeTypeMap . getMimeTypeFromExtension ( MimeTypeMap . getFileExtensionFromUrl ( versionUrl ));

request . setMimeType ( mimeString );

//在通知栏中显示,默认就是显示的

request . setNotificationVisibility ( DownloadManager . Request . VISIBILITY_VISIBLE );

request . setVisibleInDownloadsUi ( true );

//sdcard的目录下的download文件夹,必须设置

request . setDestinationInExternalPublicDir ( "/download/" , versionName );

//request.setDestinationInExternalFilesDir(),也可以自己制定下载路径

//将下载请求加入下载队列

downloadManager = ( DownloadManager ) mContext . getSystemService ( Context . DOWNLOAD_SERVICE );

//加入下载队列后会给该任务返回一个long型的id,

//通过该id可以取消任务,重启任务等等,看上面源码中框起来的方法

mTaskId = downloadManager . enqueue ( request );

//注册广播接收者,监听下载状态

mContext . registerReceiver ( receiver ,

new IntentFilter ( DownloadManager . ACTION_DOWNLOAD_COMPLETE ));

}


接下来是广播接收器


//广播接受者,接收下载状态

private BroadcastReceiver receiver = new BroadcastReceiver () {

@Override

public void onReceive (







请到「今天看啥」查看全文