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 Android利用Fiddler进行网络数据抓包
  2. Android 4.1源码编译找不到资源文件解决办法
  3. Android请求获取Java后端数据,登录界面例子
  4. Android设置权限问题
  5. android ListView没有数据时信息显示

随机推荐

  1. android在程序中获取sdk版本
  2. Android编译系统——main.mk(Android(安
  3. Android(安卓) 学习总结杂项
  4. Android弹出窗口
  5. Android(安卓)文件上传
  6. 自动同意SDK components协议
  7. 【从头学android】从新的Activity中返回
  8. android中的dispatchTouchEvent、onInter
  9. android 拍照、相册选取,适配7.0
  10. Android之实现百度云主界面框架