DownloadManager是系统开放给第三方应用使用的类,包含两个静态内部类DownloadManager.Query和DownloadManager.Request。DownloadManager.Request用来请求一个下载,DownloadManager.Query用来查询下载信息。具体使用代码如下:

 package com.example.administrator.mystudent.downloadManager;

 import android.app.Activity;
import android.app.DownloadManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.Cursor;
import android.net.Uri;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast; import com.example.administrator.mystudent.R; import java.util.HashMap;
import java.util.Map; public class DownLoadActivity extends Activity {
private Button starButton;
private Button stopButton;
private Button dirButton;
private TextView infoText; private DownloadManager downloader;
private Uri uri;
private long reference; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_down_load); initView();
} private void initView() {
starButton = (Button) findViewById(R.id.star);
stopButton = (Button) findViewById(R.id.stop);
dirButton = (Button) findViewById(R.id.dir);
infoText= (TextView) findViewById(R.id.myText); starButton.setOnClickListener(new myButtonListener());
stopButton.setOnClickListener(new myButtonListener());
dirButton.setOnClickListener(new myButtonListener());
} class myButtonListener implements View.OnClickListener {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.star: {
//执行下载任务
downLoadManager();
}
break;
case R.id.stop: {
//停止下载
downloader.remove(reference);
}
break;
case R.id.dir: {
//获取存放地址
Map sDir=getMyFilesDir();
infoText.setText("downid:"+sDir.get("downid")
+"title:"+sDir.get("title")
+"statuss:"+sDir.get("statuss")
+"address:"+sDir.get("address")
+"status:"+sDir.get("status")
);
}
break;
}
}
} /**
* 获取下载的文件存贮路径
* @return 文件路径
*/
private Map getMyFilesDir() {
Map<String, String> map = null;
//创建查询对象
DownloadManager.Query query=new DownloadManager.Query();
//根据任务编号查询下载任务信息
query.setFilterById(reference); Cursor cursor=downloader.query(query);
while (cursor.moveToNext()){
String downId= cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_ID)); //下载文件的id
String title = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_TITLE)); //下载文件的题目
String address = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)); //下载的地址
String statuss = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)); //状态
String size= cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR)); //大小
String sizeTotal = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES)); //总大小 map = new HashMap<String, String>();
map.put("downid", downId);
map.put("title", title);
map.put("statuss", statuss);
map.put("address", address);
map.put("status", sizeTotal+":"+size);
}
cursor.close();
return map;
} /**
* DownloadManager的使用
*/
private void downLoadManager() {
//创建downLoadManager的管理器
downloader = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
//创建一个URI
// uri = Uri.parse("http://biz.10039shop.com/download/leyt/leyt.apk");
uri = Uri.parse("http://p1.ifengimg.com/a/2017_09/75dd25f878e8715_size66_w600_h363.jpg");
//封装一个request对象
DownloadManager.Request request = new DownloadManager.Request(uri);
//设置文件必须在WIFI下下载
request.setAllowedNetworkTypes(request.NETWORK_WIFI); //用于设置下载时时候在状态栏显示通知信息
request.setNotificationVisibility(request.VISIBILITY_VISIBLE);
//设置通知栏标题
request.setTitle("百度下载");
//设置Notification的message信息
request.setDescription("图片正在下载");
//用于设置漫游状态下是否可以下载
request.setAllowedOverRoaming(false);
//设置文件存放目录
request.setDestinationInExternalFilesDir(this, Environment.DIRECTORY_DOWNLOADS, "myDownLoad"); //发送request请求并返回一个下载ID(开始下载了)
reference = downloader.enqueue(request);
Log.e("开始下载", "下载的id是" + reference); //创建一个下载的广播,下载完成之后
IntentFilter intentFilter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE); BroadcastReceiver myReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
long referenceTo = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if (referenceTo == reference) {
Log.e("结束下载", "下载完成" + referenceTo);
Toast.makeText(getApplicationContext(), "文件下载完成", Toast.LENGTH_SHORT).show();
}
}
};
//注册广播
registerReceiver(myReceiver, intentFilter);
}
}

DownloadManager的使用的更多相关文章

  1. [Android Pro] 判断Uri对应的ContentProvider所操作的数据库u存在,及DownloadManager的暂停,继续

    reference to : http://blog.csdn.net/u012858313/article/details/38821857 项目中遇到一个问题,就是用到DownloadManage ...

  2. app的自动更新(调用DownloadManager)

    具体思路为:调用接口与服务器版本对比,当服务器版本号大于本地的,调用DownloadManager进行下载,之前也试过很多方法,但是兼容性都不是很好,还有一点要注意的是,在这里我并没有设置固定的下载路 ...

  3. DownloadManager

    在androi中,volley适合小文件的获取和大并发,如果支持大文件的下载可以用Android原生的DownloadManager.DownloadManager默认支持多线程下载.断点续传等. 基 ...

  4. Android 使用 DownloadManager 管理系统下载任务的方法,android管理系统

    从Android 2.3(API level 9)开始Android用系统服务(Service)的方式提供了Download Manager来优化处理长时间的下载操作.Download Manager ...

  5. DownloadManager补漏

    原始完成于:2014-10-24 20:01:03 DownloadManager是一个处理HTTP下载请求的系统服务: 1. 基本用法 1 private void download() { 2 R ...

  6. DownloadManager 的使用

    一.基本概念    1.DownloadManager是Android 2.3A (API level 9) 引入的,基于http协议,用于处理长时间下载. 2.DownloadManager对于断点 ...

  7. Android--调用系统的DownLoadManager去下载文件

    代码里面有详细的注释: /** * 该方法是调用了系统的下载管理器 */ public void downLoadApk(Context context,String url){ /** * 在这里返 ...

  8. 使用downloadmanager调用系统的下载

    /** * 文件名 UpdateDownload.java * 包含类名列表 com.issmobile.numlibrary.tool * 版本信息  版本号  * 创建日期 2014年7月14日  ...

  9. DownloadManager 下载管理类

    演示 简介 从Android 2.3开始新增了一个下载管理类,在SDK的文档中我们查找android.app.DownloadManager可以看到.下载管理类可以长期处理多个HTTP下载任务,客户端 ...

  10. 安卓开发之非常好用的AndroidOne框架DownloadManager

    AndroidOne框架是采用MVC模式,集成了Android主流开源技术及组件,是一款极速且简单高效开发框架,整个项目包含两个部分AndroidOne,oneCore AndroidOne为演示项目 ...

随机推荐

  1. linux 命令——11 nl (转)

    nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等 ...

  2. 使用JDBC操作SAP云平台上的HANA数据库

    本文假设您对JDBC(Java Database Connectivity)有最基本的了解.您也可以将其同ADBC(ABAP Database Connectivity)做对比,细节请参考我的博客AD ...

  3. Python开发第二篇

    运算符 1.算术运算符 % 取余运算符,返回余数 ** 幂运算符 //返回商的整数部分 2.逻辑运算符 and  与运算符 a and b 如果a为False是,表达式为False,如果a为True返 ...

  4. IOS 旋转+缩放(手势识别)

    @interface NJViewController ()<UIGestureRecognizerDelegate> @property (weak, nonatomic) IBOutl ...

  5. UVA Live Achrive 4327 Parade (单调队列,dp)

    容易想到dp[i][j]表示在第i行j个路口的开始走最大高兴值. 每次可以向左走,或者向右边走,然后向北走.(或者直接往北) 向左走到,状态转移为dp[i][j] = dp[i][k] + happy ...

  6. IBM中国

    https://www.ibm.com/developerworks/cn/linux/l-memory/

  7. python_31_集合

    # 集合是一个无序的,不重复的数据组合,它的主要作用如下: # 去重,把一个列表变成集合,就自动去重了 # 关系测试,测试两组数据之前的交集.差集.并集等关系 s = set([3, 5, 9, 10 ...

  8. React后台管理系统-首页Home组件

    1.Home组件要显示用户总数.商品总数和订单总数,数据请求后端的 /manage/statistic/base_count.do接口,返回的是 this.state = {            u ...

  9. jrtplib移植

    jrtplib版本:3.11.1 jthread版本:1.3.3 libsrtp版本:1.6.0 jrtplib库有两种编译方式: 1. 使能jthread编译,此方式可使jrtplib自动在后台轮询 ...

  10. P4747 D’s problem(d)

    时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题 描述 题目描述 小D是一名魔法师,它最喜欢干的事就是对批判记者了. 这次记者招待会上,记者对 ...