您的位置:首页 > 大数据

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

2015-10-07 14:57 429 查看

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"/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: