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 }