How to Show download progress in progress bar in Android?
android, android-progressbar, download-manager
Solution
You could use a ProgressBar to accomplish this.
First, add a progressbar to your interface like this:
<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Small"/>
Then in your code update your method like this:
protected ProgressBar mProgressBar;
protected long downloadId;
protected DownloadManager manager;
public void startdownload() {
//<SET UP DOWNLOAD MANAGER HERE>
downloadId = manager.enqueue(request);
mProgressBar = findViewById(R.id.progress_bar);
Timer myTimer = new Timer();
myTimer.schedule(new TimerTask() {
@Override
public void run() {
DownloadManager.Query q = new DownloadManager.Query();
q.setFilterById(downloadId);
Cursor cursor = manager.query(q);
cursor.moveToFirst();
int bytes_downloaded = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
int bytes_total = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));
cursor.close();
int dl_progress = (bytesDownloaded * 1f / bytesTotal) * 100;
runOnUiThread(new Runnable(){
@Override
public void run(){
mProgressbar.setProgress((int) dl_progress);
}
});
}
}, 0, 10);
}
Problem
I am using .net web services and I am able to download the file in sd card, But I want to show progress bar when particular file start download and complete and then I want to show options like view and cancel. Click event Class: ``` public void onItemClick(AdapterView<?> parent, View v, int position, long id) { LazyAdapter ca = (LazyAdapter)parent.getAdapter(); FolderList item_name = (FolderList)ca.getItem(position); FolderList DocumentID = (FolderList)ca.getItem(position); FolderList type = (FolderList)ca.getItem(position); Intent mIntent = new Intent(); mIntent.putExtra("item_name", item_name.folder_name); mIntent.putExtra("item_id", DocumentID.ID); mIntent.putExtra("item_type", type.type); mIntent.getStringExtra("item_name"); String Type = mIntent.getStringExtra("item_type"); Log.i("Type", Type); if { // Some code here... } else { Intent i = new Intent(getApplicationContext(), Display_image.class); i.putExtra("item_name", item_name.folder_name); i.putExtra("ID", DocumentID.ID); i.putExtra("item_type", type.type); i.putExtra("User_ID",User_ID); i.getStringExtra("item_name"); Id = i.getStringExtra("ID"); i.getStringExtra("item_type"); startActivity(i); } } ``` My Code: I want to use download manager ``` SoapPrimitive DocumentResponse = (SoapPrimitive)Envelope.getResponse(); Log.i("DocumentResponse", DocumentResponse.toString()); String DocAsString = DocumentResponse.toString(); byte[] decodedString = Base64.decode(DocAsString, Base64.DEFAULT); File direct = new File(Environment.getExternalStorageDirectory() + "/MyFolder"); if(!direct.exists()) { direct.mkdir(); } File photo = new File(Environment.getExternalStorageDirectory() + "/MyFolder", Name); if (photo.exists()) { photo.delete(); } try { DownloadManager.Request request = new DownloadManager.Request(Uri.parse(Name)); request.setDescription("Have Fun ;)"); request.setTitle("Downloading..."); // in order for this if to run, you must use the android 3.2 to compile your app if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { request.allowScanningByMediaScanner(); request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); } FileOutputStream fos=new FileOutputStream(photo.getPath()); fos.write(decodedString); fos.close(); DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); manager.enqueue(request); ContentValues values= new ContentValues(); System.out.println(values); } catch (java.io.IOException e) { Log.e("PictureDemo", "Exception in photoCallback", e); } } ``` Please suggest how to use download manager into it??? thanks