Android Download Manager
Download Manager
DownloadManager is Android API(above 2.3).
This has download features.
Code
file : File destination URL
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); Uri uri = Uri.parse(file); DownloadManager.Request request = new DownloadManager.Request(uri); request.setTitle(uri.getLastPathSegment()); request.setDescription(file); request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI); manager.enqueue(request); Toast.makeText(this, getString("Download"),Toast.LENGTH_LONG).show();
Problem
- It doesn’t support https
- Cannot get progress
- Cannot handle processing
Basically, DownloadManager is OS support. We cannot handle anything while downloading.
If you want to support https, progress, you need to create downloader by myself.
Download Completion Receiver
To detect finish(fail, success), we need to add BroadCastReceiver.
DownloadManagerReceiver
This receiver catches download finish.
public class DownloadManagerReceiver extends BroadcastReceiver { private static final String TAG = "DownloadManagerReceiver"; @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE)) { Bundle extras = intent.getExtras(); long id = extras.getLong(DownloadManager.EXTRA_DOWNLOAD_ID, -1); if (id != -1) { DownloadManager.Query q = new DownloadManager.Query(); q.setFilterById(id); DownloadManager manager = (DownloadManager) context .getSystemService(Context.DOWNLOAD_SERVICE); Cursor c = manager.query(q); if (c.moveToFirst()) { // Get download status int status = c .getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS)); if (status == DownloadManager.STATUS_SUCCESSFUL) { // Download success // Show results Toast.makeText(context, context.getString("Success"), Toast.LENGTH_SHORT).show(); // Get local file path String path = c.getString(c .getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME)); } else if (status == DownloadManager.STATUS_FAILED) { // Failed Toast.makeText(context, context.getString(R.string.download_failed), Toast.LENGTH_LONG) .show(); } } } } } }
AndroidManifest.xml
<receiver android:name=".web.DownloadManagerReceiver"> <intent-filter> <action android:name="android.intent.action.DOWNLOAD_COMPLETE"/> </intent-filter> </receiver>