DownloadManager的使用
DownloadManager是系统开放给第三方应用使用的类,包含两个静态内部类DownloadManager.Query和DownloadManager.Request。DownloadManager.Request用来请求一个下载,DownloadManager.Query用来查询下载信息。具体使用代码如下:
1 package com.example.administrator.mystudent.downloadManager; 2 3 import android.app.Activity; 4 import android.app.DownloadManager; 5 import android.content.BroadcastReceiver; 6 import android.content.Context; 7 import android.content.Intent; 8 import android.content.IntentFilter; 9 import android.database.Cursor; 10 import android.net.Uri; 11 import android.os.Environment; 12 import android.support.v7.app.AppCompatActivity; 13 import android.os.Bundle; 14 import android.util.Log; 15 import android.view.View; 16 import android.widget.AdapterView; 17 import android.widget.Button; 18 import android.widget.TextView; 19 import android.widget.Toast; 20 21 import com.example.administrator.mystudent.R; 22 23 import java.util.HashMap; 24 import java.util.Map; 25 26 public class DownLoadActivity extends Activity { 27 private Button starButton; 28 private Button stopButton; 29 private Button dirButton; 30 private TextView infoText; 31 32 private DownloadManager downloader; 33 private Uri uri; 34 private long reference; 35 36 @Override 37 protected void onCreate(Bundle savedInstanceState) { 38 super.onCreate(savedInstanceState); 39 setContentView(R.layout.activity_down_load); 40 41 initView(); 42 } 43 44 private void initView() { 45 starButton = (Button) findViewById(R.id.star); 46 stopButton = (Button) findViewById(R.id.stop); 47 dirButton = (Button) findViewById(R.id.dir); 48 infoText= (TextView) findViewById(R.id.myText); 49 50 starButton.setOnClickListener(new myButtonListener()); 51 stopButton.setOnClickListener(new myButtonListener()); 52 dirButton.setOnClickListener(new myButtonListener()); 53 } 54 55 class myButtonListener implements View.OnClickListener { 56 @Override 57 public void onClick(View v) { 58 switch (v.getId()) { 59 case R.id.star: { 60 //执行下载任务 61 downLoadManager(); 62 } 63 break; 64 case R.id.stop: { 65 //停止下载 66 downloader.remove(reference); 67 } 68 break; 69 case R.id.dir: { 70 //获取存放地址 71 Map sDir=getMyFilesDir(); 72 infoText.setText("downid:"+sDir.get("downid") 73 +"title:"+sDir.get("title") 74 +"statuss:"+sDir.get("statuss") 75 +"address:"+sDir.get("address") 76 +"status:"+sDir.get("status") 77 ); 78 } 79 break; 80 } 81 } 82 } 83 84 /** 85 * 获取下载的文件存贮路径 86 * @return 文件路径 87 */ 88 private Map getMyFilesDir() { 89 Map<String, String> map = null; 90 //创建查询对象 91 DownloadManager.Query query=new DownloadManager.Query(); 92 //根据任务编号查询下载任务信息 93 query.setFilterById(reference); 94 95 Cursor cursor=downloader.query(query); 96 while (cursor.moveToNext()){ 97 String downId= cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_ID)); //下载文件的id 98 String title = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_TITLE)); //下载文件的题目 99 String address = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)); //下载的地址 100 String statuss = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)); //状态 101 String size= cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR)); //大小 102 String sizeTotal = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES)); //总大小 103 104 map = new HashMap<String, String>(); 105 map.put("downid", downId); 106 map.put("title", title); 107 map.put("statuss", statuss); 108 map.put("address", address); 109 map.put("status", sizeTotal+":"+size); 110 } 111 cursor.close(); 112 return map; 113 } 114 115 /** 116 * DownloadManager的使用 117 */ 118 private void downLoadManager() { 119 //创建downLoadManager的管理器 120 downloader = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); 121 //创建一个URI 122 // uri = Uri.parse("http://biz.10039shop.com/download/leyt/leyt.apk"); 123 uri = Uri.parse("http://p1.ifengimg.com/a/2017_09/75dd25f878e8715_size66_w600_h363.jpg"); 124 //封装一个request对象 125 DownloadManager.Request request = new DownloadManager.Request(uri); 126 //设置文件必须在WIFI下下载 127 request.setAllowedNetworkTypes(request.NETWORK_WIFI); 128 129 //用于设置下载时时候在状态栏显示通知信息 130 request.setNotificationVisibility(request.VISIBILITY_VISIBLE); 131 //设置通知栏标题 132 request.setTitle("百度下载"); 133 //设置Notification的message信息 134 request.setDescription("图片正在下载"); 135 //用于设置漫游状态下是否可以下载 136 request.setAllowedOverRoaming(false); 137 //设置文件存放目录 138 request.setDestinationInExternalFilesDir(this, Environment.DIRECTORY_DOWNLOADS, "myDownLoad"); 139 140 //发送request请求并返回一个下载ID(开始下载了) 141 reference = downloader.enqueue(request); 142 Log.e("开始下载", "下载的id是" + reference); 143 144 //创建一个下载的广播,下载完成之后 145 IntentFilter intentFilter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE); 146 147 BroadcastReceiver myReceiver = new BroadcastReceiver() { 148 @Override 149 public void onReceive(Context context, Intent intent) { 150 long referenceTo = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1); 151 if (referenceTo == reference) { 152 Log.e("结束下载", "下载完成" + referenceTo); 153 Toast.makeText(getApplicationContext(), "文件下载完成", Toast.LENGTH_SHORT).show(); 154 } 155 } 156 }; 157 //注册广播 158 registerReceiver(myReceiver, intentFilter); 159 } 160 }