开发者社区> 开开心心过> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: ?? Android大数据、断点续传、耗时下载之DownloadManager开发简介(1) Android涉及到的网络数据请求,如果是零星数据、且数据量较小(几十KB到几百KB,1MB以内),一般的,可以自己使用Android原生HTTP或者第三方开源框架如Volley(相关文章:http://blog.
+关注继续查看
福利推荐:阿里云、腾讯云、华为云等大品牌云产品全线2折优惠活动来袭,4核8G云服务器899元/3年,新老用户共享优惠,点击这里立即抢购>>>

??

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;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Button button = (Button) findViewById(R.id.button);
		button.setOnClickListener(new View.OnClickListener() {

			@Override
			public 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"/>


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android Studio下载Gradle一直失败,使用正确的下载地址
Android Studio下载Gradle一直失败,使用正确的下载地址
0 0
Android Studio下载SDK的链接
Android Studio下载SDK的链接
0 0
LINUX下Android NDK下载并配置
LINUX下Android NDK下载并配置
0 0
Android SDK Manager无法显示可供下载的未安装SDK解决方案
Android SDK Manager无法显示可供下载的未安装SDK解决方案
0 0
Android核心服务解析篇(一)——下载Android源代码
Android核心服务解析篇(一)——下载Android源代码
0 0
Android 天气APP(二十六)增加自动更新(检查版本、通知栏下载、自动安装)
Android 天气APP(二十六)增加自动更新(检查版本、通知栏下载、自动安装)
0 0
Window10 下载AOSP(Android源码) 亲测有效
Window10 下载AOSP(Android源码) 亲测有效
0 0
Android - 手机下载的缓存视频在文件管理怎么找不到?
Android - 手机下载的缓存视频在文件管理怎么找不到?
0 0
Android WebView下载使用教程
Android WebView下载使用教程
0 0
Android Auto汽车下载使用教程(中国版)
Android Auto汽车下载使用教程(中国版)
0 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Android组件化实现
立即下载
蚂蚁聚宝Android秒级编译—— Freeline
立即下载
Android插件化:从入门到放弃
立即下载


http://www.vxiaotou.com