Android大数据、断点续传、耗时下载之DownloadManager开发简介(1)

Android涉及到的网络数据请求,如果是零星数据、且数据量较小(几十KB到几百KB,1MB以内),一般的,可以自己使用Android原生HTTP或者第三方开源框架如Volley(相关文章:http://blog.csdn.net/zhangphil/article/details/48049831 ),AsyncHttpClient(相关文章:http://blog.csdn.net/zhangphil/article/details/48595817 ),Glide(相关文章,http://blog.csdn.net/zhangphil/article/details/45535693 )等等异步数据请求轻松完成任务。
然而,如果下载数据大,几MB到几百MB甚至GB量级的数据,这种情况下载任务必然耗时,并且极可能需要断点续传,典型的,如现在很多手机应用市场APP,给用户提供多任务下载APP安装文件到本地的功能,而这些APP小则几MB大则上百MB,那么这种场景就应该考虑使用Android DownloadManager。
Android DownloadManager就是为了支持大数据、断点续传这些下载任务而设计的。
现在给出一个简单的例子,说明如何使用Android DownloadManager从一个给定的URL下载一个较大数据(若干MB)。

测试的MainActivity.java:

package zhangphil.demo;import android.app.Activity;import android.app.DownloadManager;import android.app.DownloadManager.Request;import android.content.Context;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.view.View;import android.widget.Button;public class MainActivity extends Activity {private DownloadManager downloadManager;private long Id;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button = (Button) findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// remove将依据Id号取消相应的下载任务// 可批量取消,remove(id1,id2,id3,id4,...);downloadManager.remove(Id);}});downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);// 假设从这一个链接下载一个大文件。Request request = new Request(Uri.parse("http://apkc.mumayi.com/2015/03/06/92/927937/xingxiangyi_V3.1.3_mumayi_00169.apk"));// 仅允许在WIFI连接情况下下载request.setAllowedNetworkTypes(Request.NETWORK_WIFI);// 通知栏中将出现的内容request.setTitle("我的下载");request.setDescription("下载一个大文件");// 下载过程和下载完成后通知栏有通知消息。request.setNotificationVisibility(Request.VISIBILITY_VISIBLE | Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);// 此处可以由开发者自己指定一个文件存放下载文件。// 如果不指定则Android将使用系统默认的// request.setDestinationUri(Uri.fromFile(new File("")));// 默认的Android系统下载存储目录request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "my.apk");// enqueue 开始启动下载...Id = downloadManager.enqueue(request);}}

MainActivity.java需要的activity_main.xml里面仅仅只有一个Button按钮用于测试取消下载任务,在次不再赘述。


不要忘记在AndroidManifest.xml中添加相关权限。读写存储设备权限,网络访问请求权限,以及下载权限:

<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>     <uses-permission android:name="android.permission.INTERNET"/>


更多相关文章

  1. Android处理屏幕旋转时的解决方案
  2. Android(安卓)SQLite使用方法
  3. Android向服务器传接和接收数据的方法汇总
  4. Android(安卓)Studio下载安装教程及开发环境搭建
  5. Android(安卓)列表选择框 Spinner详解及实例
  6. Android(安卓)应用架构组件(Architecture Components)实践
  7. Android(安卓)4.4环境搭建——Android(安卓)SDK下载与安装
  8. [Android] ContentProvider实例详解
  9. 在Android中查看和管理sqlite数据库

随机推荐

  1. Android基于腾讯X5内核的WebView(超级浏
  2. 用Kotlin实现Android点击事件的方法
  3. Android 中Seekbar详解及简单实例
  4. Android dpi,dp,dip,px的关系
  5. Android ORM系列之GreenDao最佳实践
  6. android 的OOM
  7. Android 二进制、10进制、16进制互相转换
  8. 详解Android中获取SD卡和内存的空间信息
  9. busybox tools
  10. GitHub上优秀Android 开源项目