2014-04-11 65 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)); 
       } 
      } 

     }}); 
相关问题