How to store files generated from app in "Downloads" folder of Android?

Now from your question edit I think understand better what you want. Files shown on the Downloads menu from the one circled in red are ones that are actually downloaded via the DownloadManager, though the previos steps I gave you will save files in your downloads folder but they will not show in this menu because they weren't downloaded. However to make this work, you have to initiate a download of your file so it can show here.

Here is an example of how you can start a download:

 DownloadManager.Request request = new DownloadManager.Request(uri);
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "fileName");
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); // to notify when download is complete
request.allowScanningByMediaScanner();// if you want to be available from media players
DownloadManager manager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
manager.enqueue(request);

This method is used to download from a Uri and i have not used it with a local file.

If your file is not from the internet you could try saving a temporary copy and get the Uri of the file for this value.


Just use the DownloadManager to download your generated file like this:

File dir = new File("//sdcard//Download//");

File file = new File(dir, fileName);

DownloadManager downloadManager = (DownloadManager) context.getSystemService(DOWNLOAD_SERVICE);

downloadManager.addCompletedDownload(file.getName(), file.getName(), true, "text/plain",file.getAbsolutePath(),file.length(),true);

The "text/plain" is the mime type you pass so it will know which applications can run the downloadedfile. That did it for me.


Use this to get the directory:

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);

And don't forget to set this permission in your manifest.xml:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Tags:

Android