欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

僅4行代碼實現(xiàn)Android快速文件下載

 更新時間:2016年07月08日 16:01:29   投稿:lijiao  
僅4行代碼實現(xiàn)Android快速文件下載,這篇文章主要為大家詳細介紹了Android實現(xiàn)快速文件下載功能的方法,感興趣的小伙伴們可以參考一下

寫在前面的廢話 

下載文件,幾乎是所有APP都會用到的功能!算了,還是不廢話了,直接開寫吧。。。 

簡單使用

 完成一個下載任務(wù)只需要4行代碼,什么斷點續(xù)傳,大文件下載,通知欄進度顯示….都不需要你操心。

 //創(chuàng)建下載任務(wù),downloadUrl就是下載鏈接
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(downloadUrl));
//指定下載路徑和下載文件名
request.setDestinationInExternalPublicDir("/download/", fileName);
//獲取下載管理器
DownloadManager downloadManager= (DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE);
//將下載任務(wù)加入下載隊列,否則不會進行下載
downloadManager.enqueue(request); 

高級用法
----通過上面的代碼大家也看出來了,我們使用的是系統(tǒng)提供的下載管理器進行下載,從API 9就開始支持了,所以不用擔(dān)心在兼容問題
----既然是系統(tǒng)提供的,那么肯定還有更加強大的用法,文章繼續(xù) 

讓我們看DownloadManager的源碼,提供了這么多方法 

DownloadManager的方法 

DownloadManager.Request的方法

方法差不多就這些,已經(jīng)比較全了,可以滿足我們絕大部分的使用場景。

實際使用
接下來我們就以APP應(yīng)用內(nèi)更新為例,講一下這些方法的使用 

1.首先我們梳理下APP應(yīng)用內(nèi)更新的邏輯


APP應(yīng)用內(nèi)更新 

2.接下來看具體實現(xiàn),上代碼

 //使用系統(tǒng)下載器下載
private void downloadAPK(String versionUrl, String versionName) {
    //創(chuàng)建下載任務(wù)
    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(versionUrl));
    request.setAllowedOverRoaming(false);//漫游網(wǎng)絡(luò)是否可以下載

    //設(shè)置文件類型,可以在下載結(jié)束后自動打開該文件
    MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
    String mimeString = mimeTypeMap.getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(versionUrl));
    request.setMimeType(mimeString);

    //在通知欄中顯示,默認(rèn)就是顯示的
    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);
    request.setVisibleInDownloadsUi(true);

    //sdcard的目錄下的download文件夾,必須設(shè)置
    request.setDestinationInExternalPublicDir("/download/", versionName);
    //request.setDestinationInExternalFilesDir(),也可以自己制定下載路徑

    //將下載請求加入下載隊列
    downloadManager = (DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE);
    //加入下載隊列后會給該任務(wù)返回一個long型的id,
    //通過該id可以取消任務(wù),重啟任務(wù)等等,看上面源碼中框起來的方法
    mTaskId = downloadManager.enqueue(request);

    //注冊廣播接收者,監(jiān)聽下載狀態(tài)
    mContext.registerReceiver(receiver,
        new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
  } 

接下來是廣播接收器

   //廣播接受者,接收下載狀態(tài)
  private BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
      checkDownloadStatus();//檢查下載狀態(tài)
    }
  }; 

檢查下載狀態(tài)

 //檢查下載狀態(tài)
  private void checkDownloadStatus() {
    DownloadManager.Query query = new DownloadManager.Query();
    query.setFilterById(mTaskId);//篩選下載任務(wù),傳入任務(wù)ID,可變參數(shù)
    Cursor c = downloadManager.query(query);
    if (c.moveToFirst()) {
      int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));
      switch (status) {
        case DownloadManager.STATUS_PAUSED:
          MLog.i(">>>下載暫停");
        case DownloadManager.STATUS_PENDING:
          MLog.i(">>>下載延遲");
        case DownloadManager.STATUS_RUNNING:
          MLog.i(">>>正在下載");
          break;
        case DownloadManager.STATUS_SUCCESSFUL
          MLog.i(">>>下載完成");
          //下載完成安裝APK
          //downloadPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath() + File.separator + versionName;
          installAPK(new File(downloadPath));
          break;
        case DownloadManager.STATUS_FAILED:
          MLog.i(">>>下載失敗");
          break;
      }
    }
  } 

安裝APK

   //下載到本地后執(zhí)行安裝
  protected void installAPK(File file) {
    if (!file.exists()) return;
    Intent intent = new Intent(Intent.ACTION_VIEW);
    Uri uri = Uri.parse("file://" + file.toString());
    intent.setDataAndType(uri, "application/vnd.android.package-archive");
    //在服務(wù)中開啟activity必須設(shè)置flag,后面解釋
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    mContext.startActivity(intent);
  } 

到此就完成了應(yīng)用內(nèi)更新APP的代碼,但是有一些坑需要注意! 

希望你可以看到最后這幾句,不然你也會被坑的!
 1.雖然下載什么的不需要自己操心了,但是建議還是將整個上面四段代碼放在Service中執(zhí)行,因為放在Activity中時,當(dāng)用戶按home鍵后,即使下載完了,也不會彈出安裝界面 
2.建議使用startService的方式啟動Service,這樣不會與Activity生命周期綁定,保證下載完后能順利安裝。 
3.Service使用完后要及時地停掉!

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論