65.9K
CodeProject is changing. Read more.
Home

Downloading multiple files using AsyncTask in Android

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.22/5 (8 votes)

Dec 1, 2011

Eclipse
viewsIcon

62402

downloadIcon

3895

This article teaches you how to download multiple files using progressBar, Notification, and AsyncTask.

Introduction

This article shows how to download multiple files using progressBar, Notification, and AsyncTask.

Using the code

  1. The first thing to do is check the connection using the isInternetConnectionActive(context) method. If this method return true, then create a notification for showing a message:
  2. private static final int HELLO_ID = 1;
        
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
            
        if(isInternetConnectionActive(getApplicationContext())) {
         	showNotification(1);
        }
        else {
        	showNotification(0);
        }
    }
         
    private boolean isInternetConnectionActive(Context context) {
        	NetworkInfo networkInfo = ((ConnectivityManager) context
        	    .getSystemService(Context.CONNECTIVITY_SERVICE))
        	    .getActiveNetworkInfo();
    
      if(networkInfo == null || !networkInfo.isConnected()) {
         return false;
      }
         return true;
    }
        
    private void showNotification(int status){
        	String ns = Context.NOTIFICATION_SERVICE;
       NotificationManager mNotificationManager = 
           (NotificationManager) getSystemService(ns);
    
       int icon = android.R.drawable.ic_media_play;
       CharSequence ticketText = "Connection";
       long when = System.currentTimeMillis();
    
       Notification notification = new Notification(icon, ticketText, when);
    
       Context context = getApplicationContext();
       CharSequence contentTitle = "Internet Connection";
       CharSequence contentText = "";
            
       if(status == 1){
         	contentText = "Internet connected, Are you Update your Application?";
       }
       else{
        	contentText = "Internet disconnected!";
       }
           
       Intent notificationIntent = new Intent(this, NotifyPage.class);
       notificationIntent.addFlags(Notification.FLAG_ONGOING_EVENT);
       PendingIntent contentIntent = 
         PendingIntent.getActivity(this, 0, notificationIntent, 0);
    
       notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
    
       mNotificationManager.notify(HELLO_ID, notification);
    }
  3. In the showNotification() method, we define an Intent, declare its second parameter as NotifyPage.class. When the user selects a notification, call the activity NotifyPage. For this activity, design an XML file that includes two buttons: a button that creates another notification for showing a progressBar() and a button to cancel download operations and come back home.
  4. public void clearNotification(View v) {
    		mNotificationManager.cancel(1);
        finish();
    }
    	
    public void UpdateApplication(View v){
    	mNotificationManager.cancel(1);
    	new DownloadTask(this).execute("http://animal.discovery.com/" + 
    	    "birds/peacock/pictures/peacock-picture.jpg");
    }
  5. In the DownloadTask class, you can send several files but in this example, we just send a file address. In fact, with execute(url), you call doInBackground() that runs downloading operations in the background. You can download notification calling using four methods in the DownloadTask class:
  6. public  DownloadTask(Context context){
       this.context = context;
       //Create the notification object from NotificationHelper class
       mNotificationHelper = new NotificationHelper(context);
    }
    
    protected void onPreExecute(){
       //Create the notification in the statusbar
       mNotificationHelper.createNotification();
    }
    
    protected void onProgressUpdate(Integer... progress) {
       //This method runs on the UI thread, it receives progress updates
       //from the background thread and publishes them to the status bar
       mNotificationHelper.progressUpdate(progress[0]);
    }
    protected void onPostExecute(Void result)    {
       //The task is complete, tell the status bar about it
       mNotificationHelper.completed();
    }

Remember to define permissions related to connection in AndroidManifest.xml: android.permission.INTERNET - android.permission.ACCESS_NETWORK_STATE.

Points of Interest

This article hopefully taught you how to create a status bar notification and use a AsyncTask class for downloading or uploading files.