Xamarin: Download a file with ProgressBar
This recipe shows how to download a file using WebClient in Xamarin.Android.
To download a file (.mp3, etc.) follow these steps:
Add new using statements to your code:
using Java.IO; using System.IO; using System.Net;
Create a WebClient object:
var webClient=new WebClient();
Create the URL for the files to download:
var url=new Uri("http://8morning.com/demo/wp-content/uploads/2016/04/hoc-photoshop.jpg");
Create the array for contains the length of a file.
byte[] bytes=null;
Add an event handler that will execute when the download is complete. Create a ProgressDialog to show a progress indicator and an optional text message.
webClient.DownloadProgressChanged+= WebClient_DownloadProgressChanged; dialog = new ProgressDialog (this); dialog.SetProgressStyle (ProgressDialogStyle.Horizontal);// style is horizontal dialog.SetTitle("Downloading..."); dialog.SetCancelable (false); //dialog.SetButton("Cancel",); dialog.SetCanceledOnTouchOutside (false); //if it is true. When you touch anywhere lie outside the dialog-> dialog will be close. dialog.Show ();// showing a dialog try { bytes= await webClient.DownloadDataTaskAsync(url); } catch(TaskCanceledException) { Toast.MakeText(this,"Task Canceled!",ToastLength.Long).Show(); return; } catch(Exception a) { Toast.MakeText(this,a.InnerException.Message,ToastLength.Long).Show(); dialog.Progress=0; return; }
var documentsPath=Android.OS.Environment.ExternalStorageDirectory+"/Download"; // The direction is Download folder in Device store. A file will be save here. string localFilename = Name your file +".jpg"; string localPath=System.IO.Path.Combine(documentsPath,localFilename);// documentsPath +"/"+ localFilename dialog.SetTitle("Download Complete");// //Save the Mp3 using writeAsync FileStream fs=new FileStream(localPath,FileMode.OpenOrCreate); await fs.WriteAsync (bytes, 0, bytes.Length);// writes to Download folder fs.Close (); dialog.Progress = 0;
In event`` ``WebClient_DownloadProgressChanged will execute progress when a file is downloading.
void WebClient_DownloadProgressChanged (object sender, DownloadProgressChangedEventArgs e) { dialog.Progress = e.ProgressPercentage; if (e.ProgressPercentage == 100) { dialog.Hide (); } }
Sample
-