Implement Progress Bar for File Download in Android -
i new android development.
i've written following code download video file internet. works fine. want attach progress bar during download process.i tried subclass asynctask , write download code inside doinbackground() method. but, somehow can't figure out.
can please me modify code accomplish that?
package sample.android.download; import java.io.bufferedinputstream; import java.io.file; import java.io.fileoutputstream; import java.io.ioexception; import java.io.inputstream; import java.net.url; import java.net.urlconnection; import org.apache.http.util.bytearraybuffer; import android.app.activity; import android.content.intent; import android.net.uri; import android.os.bundle; import android.os.environment; import android.util.log; import android.widget.textview; public class downloaddemo extends activity { private textview tv; private string videourl = "http://mysite-name.com/videos/videofile_name.mp4"; private string filename = "my_video.mp4"; /** called when activity first created. */ @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); tv = (textview) findviewbyid(r.id.textview01); if(checkexternalmedia()==true) { downloadfromurl(videourl,filename); tv.append("\n\ndownload complete!"); } else { tv.append("\n\nexternal media not readable/writable"); } } /** method check whether external media available , writable. */ private boolean checkexternalmedia(){ boolean mexternalstorageavailable = false; boolean mexternalstoragewriteable = false; boolean stat; string state = environment.getexternalstoragestate(); if (environment.media_mounted.equals(state)) { // can read , write media mexternalstorageavailable = mexternalstoragewriteable = true; stat = true; } else if (environment.media_mounted_read_only.equals(state)) { // can read media mexternalstorageavailable = true; mexternalstoragewriteable = false; stat = false; } else { // can't read or write mexternalstorageavailable = mexternalstoragewriteable = false; stat = false; } tv.append("\n\nexternal media: readable="+mexternalstorageavailable+ "writable="+mexternalstoragewriteable); return stat; } /** method download external file network sd card. */ public void downloadfromurl(string videourl, string filename) { try { file root = android.os.environment.getexternalstoragedirectory(); tv.append("\nexternal file system root: "+root); file dir = new file (root.getabsolutepath() + "/video"); //dir.mkdirs(); url url = new url(videourl); //you can write here link file file = new file(dir, filename); long starttime = system.currenttimemillis(); log.d("imagemanager", "download begining"); log.d("imagemanager", "download url:" + url); log.d("imagemanager", "downloaded file name:" + filename); /* open connection url. */ urlconnection ucon = url.openconnection(); /* * define inputstreams read urlconnection. */ inputstream = ucon.getinputstream(); bufferedinputstream bis = new bufferedinputstream(is); /* * read bytes buffer until there nothing more read(-1). */ bytearraybuffer baf = new bytearraybuffer(5000); int current = 0; while ((current = bis.read()) != -1) { baf.append((byte) current); } /* convert bytes read string. */ fileoutputstream fos = new fileoutputstream(file); fos.write(baf.tobytearray()); fos.flush(); fos.close(); log.d("imagemanager", "download ready in" + ((system.currenttimemillis() - starttime) / 1000) + " sec"); } catch (ioexception e) { log.d("imagemanager", "error: " + e); } sendbroadcast(new intent(intent.action_media_mounted, uri.parse("file://"+ environment.getexternalstoragedirectory()))); } }
check:
http://developer.android.com/guide/topics/ui/dialogs.html
see example on creating progress bar within second thread.
Comments
Post a Comment