Download File in Android Studio with Progress Bar and HttpURLConnection
How to Download a File with a Progress Bar in Android
Downloading files is a common task in Android apps, but sometimes you may want to show the user how much of the file has been downloaded and how long it will take to finish. This is where a progress bar comes in handy. A progress bar is a visual indicator that shows the percentage of completion of an operation, such as downloading a file.
download file with progress bar android
In this article, we will show you three ways to download a file with a progress bar in Android: using AsyncTask and ProgressDialog, using WorkManager and NotificationManager, and using third-party libraries.
Using AsyncTask and ProgressDialog
AsyncTask is a class that allows you to perform background tasks and update the UI thread with the results. ProgressDialog is a dialog that shows a progress indicator and an optional message.
To use AsyncTask and ProgressDialog to download a file with a progress bar, follow these steps:
Declare the ProgressDialog and the DownloadTask as member fields of your activity.
ProgressDialog mProgressDialog; DownloadTask downloadTask;
Instantiate the ProgressDialog and the DownloadTask in the onCreate method.
mProgressDialog = new ProgressDialog(this); mProgressDialog.setMessage("Downloading file..."); mProgressDialog.setIndeterminate(false); mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); mProgressDialog.setCancelable(true); downloadTask = new DownloadTask(this);
Execute the DownloadTask with the URL of the file you want to download.
downloadTask.execute("
Implement the doInBackground, onProgressUpdate, and onPostExecute methods of the DownloadTask.
private class DownloadTask extends AsyncTask private Context context; private PowerManager.WakeLock mWakeLock; public DownloadTask(Context context) this.context = context; @Override protected String doInBackground(String... sUrl) InputStream input = null; OutputStream output = null; HttpURLConnection connection = null; try URL url = new URL(sUrl[0]); connection = (HttpURLConnection) url.openConnection(); connection.connect(); // check for HTTP response code if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) return "Server returned HTTP " + connection.getResponseCode() + " " + connection.getResponseMessage(); // get file length int fileLength = connection.getContentLength(); // download the file input = connection.getInputStream(); output = new FileOutputStream("/sdcard/file.zip"); byte data[] = new byte[4096]; long total = 0; int count; while ((count = input.read(data)) != -1) // I apologize for the delay, I was working on the rest of the article. Here is what I have so far: // cancel if the task is cancelled if (isCancelled()) input.close(); return null; total += count; // publish the progress if (fileLength > 0) // only if total length is known publishProgress((int) (total * 100 / fileLength)); output.write(data, 0, count); catch (Exception e) return e.toString(); finally try if (output != null) output.close(); if (input != null) input.close(); catch (IOException ignored) if (connection != null) connection.disconnect(); return null; @Override protected void onProgressUpdate(Integer... progress) super.onProgressUpdate(progress); // set the progress of the dialog mProgressDialog.setProgress(progress[0]); @Override protected void onPostExecute(String result) // dismiss the dialog mProgressDialog.dismiss(); if (result != null) Toast.makeText(context,"Download error: "+result, Toast.LENGTH_LONG).show(); else Toast.makeText(context,"File downloaded", Toast.LENGTH_SHORT).show();
Using WorkManager and NotificationManager
WorkManager is a library that allows you to schedule and run background tasks that are deferrable and guaranteed to run. NotificationManager is a system service that manages notifications.
How to show progress bar while downloading file in android
Download a file with android and show the progress in a ProgressDialog
Android download file with ProgressBar - really easy
How to download file from url with percentage progress bar in Android Studio
Android DownloadManager example with progress bar
How to implement a circular progress bar for file download in android
Android AsyncTask download file with notification progress bar
How to use Retrofit 2 to download file with progress bar in android
Android Volley download file with horizontal progress bar
How to create a custom progress bar for file download in android
Android OkHttp download file with circular progress bar
How to use RxJava and RxAndroid to download file with progress bar in android
Android Glide download image with progress bar
How to use Picasso to download image with progress bar in android
Android Firebase Storage download file with progress bar
How to use WorkManager to download file with progress bar in android
Android Coroutines download file with progress bar
How to use LiveData and ViewModel to download file with progress bar in android
Android Jetpack Compose download file with progress bar
How to use Kotlin Flow to download file with progress bar in android
Android Fresco download image with progress bar
How to use Coil to download image with progress bar in android
Android FTP download file with progress bar
How to use SFTP to download file with progress bar in android
Android SCP download file with progress bar
How to use FTPS to download file with progress bar in android
Android HTTPS download file with progress bar
How to use HTTP/2 to download file with progress bar in android
Android gRPC download file with progress bar
How to use WebSocket to download file with progress bar in android
Android Torrent download file with progress bar
How to use BitTorrent to download file with progress bar in android
Android P2P download file with progress bar
How to use IPFS to download file with progress bar in android
Android Bluetooth download file with progress bar
How to use Wi-Fi Direct to download file with progress bar in android
Android NFC download file with progress bar
How to use QR code to download file with progress bar in android
Android Dropbox API download file with progress bar
How to use Google Drive API to download file with progress bar in android
Android OneDrive API download file with progress bar
How to use Box API to download file with progress bar in android
Android AWS S3 download file with progress bar
How to use Azure Blob Storage to download file with progress bar in android
Android Cloudinary API download file with progress bar
How to use Firebase Cloud Storage Security Rules to control access for downloading files in android
Android MediaStore API download media files with progress bar
How to use ContentResolver and ContentProvider to access and download files from other apps in android
Android Scoped Storage API download files from external storage with permission and progress bar
To use WorkManager and NotificationManager to download a file with a progress bar, follow these steps:
Add the WorkManager dependency to your app's build.gradle file.
dependencies implementation "androidx.work:work-runtime:2.7.1"
Create a Worker class that extends ListenableWorker and overrides the startWork method.
public class DownloadWorker extends ListenableWorker public static final String KEY_FILE_URL = "file_url"; public static final String KEY_FILE_NAME = "file_name"; public static final String KEY_NOTIFICATION_ID = "notification_id"; public static final String KEY_NOTIFICATION_CHANNEL_ID = "notification_channel_id"; private static final int BUFFER_SIZE = 4096; private NotificationManager mNotificationManager; private NotificationCompat.Builder mNotificationBuilder; public DownloadWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) super(context, workerParams); @NonNull @Override public ListenableFuture startWork() // get the input data String fileUrl = getInputData().getString(KEY_FILE_URL); String fileName = getInputData().getString(KEY_FILE_NAME); int notificationId = getInputData().getInt(KEY_NOTIFICATION_ID, 0); String notificationChannelId = getInputData().getString(KEY_NOTIFICATION_CHANNEL_ID); // create a notification manager and a notification builder mNotificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE); mNotificationBuilder = new NotificationCompat.Builder(getApplicationContext(), notificationChannelId) .setContentTitle("Downloading file...") .setConte