如果文件已经下载,则DownloadManager不会下载文件

Inf*_*0re 5 android overriding download download-manager

我正在使用DownloadManager下载我的App文件。如果我第二次输入url,DownloadManager它将下载文件,并filename-1.file在末尾加上-1 。有没有办法不让它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;
}
Run Code Online (Sandbox Code Playgroud)

小智 2

这就是我解决它的方法,您必须向下载管理器进行查询并验证是否已经存在具有相同标题的下载。如果没有任何巧合,那么我创建一个文件并使用存在函数来验证它是否已经在下载目录中。如果不存在,我开始下载。

\n\n
downloadManager = (DownloadManager) getActivity().getSystemService(Context.DOWNLOAD_SERVICE);\n\ngridview.setOnItemClickListener(new OnItemClickListener() {\n        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {\n\n            //Crear objeto file con la ruta\n            File ExistingFile =  new File(Environment.getExternalStoragePublicDirectory(\n                    Environment.DIRECTORY_DOWNLOADS) + "/" + Archivos.get(position).getNombre());\n\n            //Checar el downloadManager\n            Cursor cursor = downloadManager.query( new Query() ); \n            boolean IsInDownloadManager;\n\n            IsInDownloadManager = false;\n            for (int i = 0; i < cursor.getCount() ; i++)\n            {\n                cursor.moveToPosition(i);\n                Log.i("Click Grid", "Objetos en download manager [" + String.valueOf(i) + "] " + cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_TITLE)));\n                if (Archivos.get(position).getNombre().equals(cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_TITLE)))){                                          \n                    IsInDownloadManager = true;\n                    Log.i("Click Grid", "Objeto est\xc3\xa1 en download Manager " + Archivos.get(position).getNombre());\n                    break;\n                }\n            }\n\n            if (IsInDownloadManager){\n                //cursor esta aputando a la fila donde se qued\xc3\xb3 en el ciclo for\n                int Status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS));\n                Log.i("Click Grid", cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)));\n\n                if (Status == DownloadManager.STATUS_SUCCESSFUL){\n                    Toast.makeText(getActivity() ,"Abriendo " +  Archivos.get(position).getNombre(), Toast.LENGTH_SHORT).show(); \n                    try { openFile(getActivity(),ExistingFile ); } catch (IOException e) {e.printStackTrace();}\n                }else{\n                     Toast.makeText(getActivity() ,Archivos.get(position).getNombre() + " ya se est\xc3\xa1 descargando", Toast.LENGTH_SHORT).show();    \n                }\n\n            }else{\n\n                if( ExistingFile.exists() ){\n                    Toast.makeText(getActivity() ,"Abriendo " +  Archivos.get(position).getNombre(), Toast.LENGTH_SHORT).show();    \n                    try { openFile(getActivity(),ExistingFile ); } catch (IOException e) {e.printStackTrace();}\n                }else{\n                    DescargarArchivo( Archivos.get(position) );\n                }\n            }\n\n        }});\n
Run Code Online (Sandbox Code Playgroud)\n