2014-04-11 66 views
4

我正在使用DownloadManager下載我的應用程序文件。 如果我第二次將網址放入DownloadManager,它會下載該文件並在最後放置一個-1 filename-1.file。有沒有辦法讓DownloadManager再次下載?或者我必須自己檢查一下嗎?DownloadManager下載文件,如果它已被下載

代碼:

private void downloadImages(final List<SomeClass> data) { 
    RuntimeExceptionDao<SomeClass, Integer> someDao = DatabaseAdapter.getInstance().getSomeDao(); 
    DownloadManager downloadmanager = (DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE); 
    for(SomeClass someClass : data){ 
     DownloadManager.Request request = getRequest(someClass); 
     someClass.mDownloadId = downloadmanager.enqueue(request); 
     someDao.createOrUpdate(someClass); 
    } 
} 

private DownloadManager.Request getRequest(SomeClass someClass) { 
    Uri uri = Uri.parse(someClass.mImage); 
    DownloadManager.Request request = new DownloadManager.Request(uri); 
    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_HIDDEN); 
    request.setVisibleInDownloadsUi(false); 
    request.setDestinationInExternalFilesDir(mContext, Environment.DIRECTORY_DOWNLOADS, car.getFileName()); 
    return request; 
} 
+0

你的代碼在哪裏?無論下載文件是否已下載,您都可以在每次下載文件之前進行檢查。 – GrIsHu

+0

我添加了代碼。有沒有一種很好的方式來獲得路徑?它應該是Environment.DIRECTORY_DOWNLOADS。這是像 /文件/下載/ – Informatic0re

回答

1

這是我如何解決這個問題,你必須做出一個查詢,下載管理器,並驗證是否已經存在具有相同標題下載。如果沒有任何重合,那麼我創建一個文件並使用存在函數來驗證它是否已經在下載目錄中。如果它不在那裏,我開始下載。

downloadManager = (DownloadManager) getActivity().getSystemService(Context.DOWNLOAD_SERVICE); 

gridview.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 

      //Crear objeto file con la ruta 
      File ExistingFile = new File(Environment.getExternalStoragePublicDirectory(
        Environment.DIRECTORY_DOWNLOADS) + "/" + Archivos.get(position).getNombre()); 

      //Checar el downloadManager 
      Cursor cursor = downloadManager.query(new Query()); 
      boolean IsInDownloadManager; 

      IsInDownloadManager = false; 
      for (int i = 0; i < cursor.getCount() ; i++) 
      { 
       cursor.moveToPosition(i); 
       Log.i("Click Grid", "Objetos en download manager [" + String.valueOf(i) + "] " + cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_TITLE))); 
       if (Archivos.get(position).getNombre().equals(cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_TITLE)))){           
        IsInDownloadManager = true; 
        Log.i("Click Grid", "Objeto está en download Manager " + Archivos.get(position).getNombre()); 
        break; 
       } 
      } 

      if (IsInDownloadManager){ 
       //cursor esta aputando a la fila donde se quedó en el ciclo for 
       int Status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)); 
       Log.i("Click Grid", cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS))); 

       if (Status == DownloadManager.STATUS_SUCCESSFUL){ 
        Toast.makeText(getActivity() ,"Abriendo " + Archivos.get(position).getNombre(), Toast.LENGTH_SHORT).show(); 
        try { openFile(getActivity(),ExistingFile); } catch (IOException e) {e.printStackTrace();} 
       }else{ 
        Toast.makeText(getActivity() ,Archivos.get(position).getNombre() + " ya se está descargando", Toast.LENGTH_SHORT).show();  
       } 

      }else{ 

       if(ExistingFile.exists()){ 
        Toast.makeText(getActivity() ,"Abriendo " + Archivos.get(position).getNombre(), Toast.LENGTH_SHORT).show();  
        try { openFile(getActivity(),ExistingFile); } catch (IOException e) {e.printStackTrace();} 
       }else{ 
        DescargarArchivo(Archivos.get(position)); 
       } 
      } 

     }}); 
相關問題