如果文件已经下载,DownloadManager不会重新下载该文件。

5
我正在使用DownloadManager下载我的应用程序文件。如果我将URL再次放入DownloadManager中,它会下载该文件并在末尾加上-1 filename-1.file。是否有一种方法可以让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;
}

你的代码在哪里?你可以在下载文件之前每次检查一下,看看该文件是否已经被下载了。 - GrIsHu
我添加了代码。有没有一种好的方法来获取路径?应该是Environment.DIRECTORY_DOWNLOADS。它类似于<包名>/Files/Downloads/。 - Informatic0re
1个回答

2

这是我解决问题的方法,你需要向下载管理器发出查询并验证是否已经存在相同标题的下载。如果没有重复,则创建一个文件并使用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) );
                }
            }

        }});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接