android DownloadManager 的學習之路

    這幾天由於公司項目需要,學習了DownloadManager下載管理器。由於公司自己寫的下載類下載速度太慢,儘管使用了多線程下載,但是下載速度不盡人意。後來自己寫了一個demo,使用了android自帶的下載管理器DownloadManager.使用DownloadManager很簡單的幾行代碼就搞定了。如下代碼所示:


  String serviceString = Context.DOWNLOAD_SERVICE; 
        DownloadManager downloadManager; 
        downloadManager = (DownloadManager)getSystemService(serviceString); 
         
        Uri uri = Uri.parse("http://au.apk.umeng.com/uploads/apps/56f52012e0f55ad7c9001efc/_umeng_%40_20_%40_b721620b58c141c9dddd8c50c4a21c52.apk"); 
        DownloadManager.Request request = new Request(uri); 
        
        File saveFile = new File(Environment.getExternalStorageDirectory()+"/download.apk");
        
        request.setDestinationUri(Uri.fromFile(saveFile));
        request.setAllowedNetworkTypes(Request.NETWORK_WIFI); 
        request.setTitle("下載demo");
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);

        mReference = downloadManager.enqueue(request); 


如果需要偵聽下載進度,或者獲取其他下載信息,可根據以下代碼來實現:

   int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));  //根據downloadManager.enqueue(request)返回的下載ID,從數據庫查詢下載狀態。
  int reasonIdx = c.getColumnIndex(DownloadManager.COLUMN_REASON);    
  int titleIdx = c.getColumnIndex(DownloadManager.COLUMN_TITLE);    //查詢下載標題 就是你setTitle的字符串
   int fileSizeIdx = c.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES);    / /  文件的總長度
   int bytesDLIdx =  c.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR);    //以下載的長度
   String title = c.getString(titleIdx);    
   int fileSize = c.getInt(fileSizeIdx);    
   int bytesDL = c.getInt(bytesDLIdx);    


   下載進度就是bytesDL / fileSize 。


可以根據自己的需要,設置是否需要在通知欄顯示下載進度,也可以註冊廣播,偵聽下載進度,和下載是否完成。


DownlaodManager的下載速度還是很快的,自此下載demo完成

這幾天一直在測試下載的性能,在測試過程中發現一個問題。那就是DownloadManager 下載文件路徑不能是app的私有目錄。會報錯。所以下載路徑只能是Sd卡目錄

另外一個,DownloadManager是在2.3系統之後才支持,低於2.3的會運行報錯



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章