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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM