2014-04-11 3 views
4

DownloadManager을 사용하여 내 App-File을 다운로드하고 있습니다. DownloadManager에 URL을 두 번 입력하면 파일이 다운로드되고 끝에 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가 아니면 안된다. 이 파일은 /Files/Downloads / – Informatic0re

답변

1

이 난 당신이 다운로드 관리자에 쿼리를하고 이미 동일한 제목의 다운로드가 있는지 확인해야, 그것을 해결하는 방법입니다. 일치하지 않으면 파일을 만들고 exist 함수를 사용하여 이미 다운로드 디렉토리에 있는지 확인합니다. 거기 있지 않으면 나는 다운로드를 시작한다.

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)); 
       } 
      } 

     }}); 
관련 문제