Downloadmanager in android

來源:互聯網
上載者:User

標籤:

Downloadmanager使用

DownloadManager是android提供的一個下載管理員

缺點:不支援斷點續傳

使用方法:

  1. 建立執行個體:

    DownloadManager manager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
  2. 建立下載任務:

    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(URL));//指定儲存地址request.setDestinationInExternalPublicDir("chuyi", "meizhi.apk");//設定允許下載的網路狀況request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI);//設定通知欄的行為request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);//通過id唯一標識此下載任務long id = manager.enqueue(request);
  3. 刪除下載任務:

    manager.remove(id);
  4. 查詢下載任務:

    DownloadManager.Query query = new DownloadManager.Query();query.setFilterById(id);Cursor cursor = manager.query(query);if(cursor.moveToFirst()){    String filename = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));    String fileUri = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));    Toast.makeText(context,"下載完成...name:"+filename+",uri:"+fileUri,Toast.LENGTH_SHORT).show();}else {  //TODO}cursor.close();
  5. 查詢下載進度:

    DownloadManager.Query query = new DownloadManager.Query().setFilterById(downloadId);Cursor c = null;try {    c = downloadManager.query(query);    if (c != null && c.moveToFirst()) {        int downloadedBytes = c.getInt(c.getColumnIndexOrThrow(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));        int totalBytes = c.getInt(c.getColumnIndexOrThrow(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));        int state = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));    }} finally {    if (c != null) {        c.close();    }}
  6. 監聽下載結束通知:

    可以通過接收DownloadManager.ACTION_DOWNLOAD_COMPLETE廣播來監聽下載結束的通知

    IntentFilter filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);    mReceiver = new BroadcastReceiver(){      public void onReceive(Context c,Intent i){          long downId = i.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID,-1);      }    }    context.registerReceiver(mReceiver,filter);
  7. 監聽下載進度:

    主要有三種方案:1.FileReceiver 2.ContentObserver 3.定時任務

    class DownloadChangeObserver extends ContentObserver {public DownloadChangeObserver(){    super(handler);}@Overridepublic void onChange(boolean selfChange) {    //查詢進度}}//in activityprivate DownloadChangeObserver downloadObserver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.download_manager_demo);……downloadObserver = new DownloadChangeObserver();}@Overrideprotected void onResume() {    super.onResume();    /** observer download change **/    getContentResolver().registerContentObserver(DownloadManagerPro.CONTENT_URI, true,                                                 downloadObserver);}@Overrideprotected void onPause() {    super.onPause();    getContentResolver().unregisterContentObserver(downloadObserver);}

    上面這種做法可能對效能有些損耗,因為會不斷觸發onChange

    推薦使用ScheduledExecutorService

    public static ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(3);Runnable command = new Runnable() {    @Override    public void run() {        updateView();    }};scheduledExecutorService.scheduleAtFixedRate(command, 0, 3, TimeUnit.SECONDS);

    參考資料:

    1. http://www.trinea.cn/android/android-downloadmanager/
    2. http://www.trinea.cn/android/android-downloadmanager/
    3. https://github.com/Trinea/android-common/blob/master/src/cn/trinea/android/common/util/DownloadManagerPro.java

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Downloadmanager in android

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.