Android Download Progress Bar
Last Updated: March 20, 2013
In this tutorial, you will learn how to implement a download progress bar in your Android application. A progress bar displays a bar to the user representing how far the operation has progressed. We will create a button and on button click will download an image file hosted in our server then stores it into the device internal storage. The download process will show a progress dialog with a bar stating the percentage of the image file being downloaded. So lets begin…
Create a new project in Eclipse File > New > Android Application Project. Fill in the details and name your project ProgressBarTutorial.
Application Name : ProgressBarTutorial
Project Name : ProgressBarTutorial
Package Name : com.androidbegin.progressbartutorial
Open your MainActivity.java and paste the following code.
MainActivity.java
package com.androidbegin.progressbartutorial; import java.io.BufferedInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLConnection; import android.os.AsyncTask; import android.os.Bundle; import android.os.Environment; import android.app.Activity; import android.app.ProgressDialog; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { // Declare variables ProgressDialog mProgressDialog; Button button; // Insert image URL String URL = "https://www.androidbegin.com/tutorial/testimage.png"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Get the view from activity_main.xml setContentView(R.layout.activity_main); // Locate a Button in your activity_main.xml layout button = (Button) findViewById(R.id.MyButton); // Capture Button clicks button.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { // Execute DownloadFile AsyncTask new DownloadFile().execute(URL); } }); } // DownloadFile AsyncTask private class DownloadFile extends AsyncTask<String, Integer, String> { @Override protected void onPreExecute() { super.onPreExecute(); // Create progress dialog mProgressDialog = new ProgressDialog(MainActivity.this); // Set your progress dialog Title mProgressDialog.setTitle("Progress Bar Tutorial"); // Set your progress dialog Message mProgressDialog.setMessage("Downloading, Please Wait!"); mProgressDialog.setIndeterminate(false); mProgressDialog.setMax(100); mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); // Show progress dialog mProgressDialog.show(); } @Override protected String doInBackground(String... Url) { try { URL url = new URL(Url[0]); URLConnection connection = url.openConnection(); connection.connect(); // Detect the file lenghth int fileLength = connection.getContentLength(); // Locate storage location String filepath = Environment.getExternalStorageDirectory() .getPath(); // Download the file InputStream input = new BufferedInputStream(url.openStream()); // Save the downloaded file OutputStream output = new FileOutputStream(filepath + "/" + "testimage.jpg"); byte data[] = new byte[1024]; long total = 0; int count; while ((count = input.read(data)) != -1) { total += count; // Publish the progress publishProgress((int) (total * 100 / fileLength)); output.write(data, 0, count); } // Close connection output.flush(); output.close(); input.close(); } catch (Exception e) { // Error Log Log.e("Error", e.getMessage()); e.printStackTrace(); } return null; } @Override protected void onProgressUpdate(Integer... progress) { super.onProgressUpdate(progress); // Update the progress dialog mProgressDialog.setProgress(progress[0]); // Dismiss the progress dialog //mProgressDialog.dismiss(); } } }
We have created a button and on button click will start an AsyncTask and download an image from a URL. The downloaded image will be stored in the internal storage.
In this tutorial, we’ve hosted our image file in our server. https://www.androidbegin.com/tutorial/testimage.png
Next, create a button in your MainActivity graphical layout. Go to res > layout > Right Click on layout > New > Android XML File
Name your new XML file activity_main.xml and paste the following codes.
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/MyButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="@string/button" /> </RelativeLayout>
Next, change the application name and other texts. Open your strings.xml in your res > values folder and paste the following code.
strings.xml
<resources> <string name="app_name">ProgressBar Tutorial</string> <string name="menu_settings">Settings</string> <string name="button">Download Image</string> </resources>
In your AndroidManifest.xml, we need to declare a permission to allow the application to write an external storage and connect to the Internet. Open your AndroidManifest.xml and paste the following code.
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.androidbegin.progressbartutorial" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <uses-permission android:name="android.permission.INTERNET" > </uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" > </uses-permission> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Output :
Source Code
[purchase_link id=”7882″ text=”Purchase to Download Source Code” style=”button” color=”green”]
The perfect and objective tutorial! Thanks
Felipe
Android Download Progress Bar
thank u ...its working
vivek nayak
Android Download Progress Bar
its working for me, hvg only 1 problem suppose i want to save that image on my specified location how can i do that.....i tried doing this OutputStream output = new FileOutputStream(filepath + "/images/" +"testimage.jpg");
Tushar Salvi
Android Download Progress Bar
Hi Gurcan, are you are trying to cancel an AsyncTask? Follow this answer in stackoverflow http://stackoverflow.com/a/6053943/1196681 hope it helps. :)
AndroidBegin
Android Download Progress Bar