Applications can download files with the download manager just like the browser and gmail. This is available starting with Gingerbread.
Your app needs the INTERNET permission to initiate a download. To save the file in the default Download directory it also needs the WRITE_EXTERNAL_STORAGE permission.
Here's how you can download an URI:
DownloadManager.Request r = new DownloadManager.Request(uri);
// This put the download in the same Download dir the browser uses
r.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "fileName");
// When downloading music and videos they will be listed in the player
// (Seems to be available since Honeycomb only)
r.allowScanningByMediaScanner();
// Notify user when download is completed
// (Seems to be available since Honeycomb only)
r.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
// Start download
DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
dm.enqueue(r);
There are a bunch of other options for customizing the notification, querying the download state and setting the download location.
This blog post shows how you could use the download manager on previous versions of Android via hidden APIs.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…