Android更新下载进度条

<

div id=”content” contentScore=”149″>下载文件会阻塞UI主线程,所以需要new一个新线程来执行下载操作,通过handler执行更新UI进度条操作。代码如下:

<

div>

<

ol>

  • public class AndroidTest extends Activity {   
  •     private static final String TAG = “AndroidTest”;   
  •   
  •     private ProgressBar progressBar = null;   
  •     private Button startButton = null;   
  •     private EditText filenameText = null;   
  •     private MyHandler handler = null;   
  •   
  •     private Message message = null;   
  •     private boolean flag = true;   
  •     private int size = 1;   
  •     private int hasRead = 0;   
  •     private int len = 0;   
  •     private byte buffer[] = new byte[10244];   
  •     private int index = 0;    
  •        
  •     @Override  
  •     public void onCreate(Bundle savedInstanceState) {   
  •     super.onCreate(savedInstanceState);   
  •         setContentView(R.layout.main);   
  •            
  •         progressBar = (ProgressBar)findViewById(R.id.progress_horizontal);   
  •         startButton = (Button)findViewById(R.id.mybutton);   
  •         startButton.setOnClickListener(new ButtonClick());   
  •        
  •         filenameText = (EditText)findViewById(R.id.fileNameID);   
  •        
  •         handler = new MyHandler();   
  •     }   
  •   
  •   
  •     public boolean downloadFile(final String urlStr, final String filename) {   
  •         new Thread(new Runnable(){     
  •             public void run() {    
  •                 try {   
  •                     URL url = new URL(urlStr);   
  •                     HttpURLConnection connection = (HttpURLConnection)url.openConnection();   
  •                     size = connection.getContentLength();   
  •                     InputStream inputStream = connection.getInputStream();   
  •                     OutputStream outputStream = new FileOutputStream(Environment.getExternalStorageDirectory()+“/”+filename);   
  •                        
  •                     while((len=inputStream.read(buffer))!=-1){   
  •                         outputStream.write(buffer);   
  •                         hasRead+=len;   
  •                         index = (int)(hasRead100)/size;   
  •                         message = new Message();   
  •                         message.what = 1;   
  •                         handler.sendMessage(message);   
  •                         Log.d(TAG, “index = “ + index);   
  •                         System.out.println(“has = “+hasRead+” size = “+size+” index = “+index);   
  •                     }   
  •                    
  •                     inputStream.close();   
  •                     outputStream.close();   
  •                 } catch (Exception e) {   
  •                     flag = false;   
  •                     e.printStackTrace();   
  •                 }   
  •             }   
  •         }).start();   
  •            
  •         return flag;   
  •     }   
  •   
  •     class ButtonClick implements OnClickListener {   
  •   
  •         public void onClick(View v) {   
  •        
  •             String url = filenameText.getText().toString();   
  •             String filename = url.substring(url.lastIndexOf(‘/’) + 1);   
  •             Log.d(TAG, “url = “ + url);   
  •             Log.d(TAG, “filename = “ + filename);   
  •                
  •             if(!downloadFile(url, filename)) {   
  •                 String rs = “下载失败 “;   
  •                 Toast.makeText(AndroidTest.this, rs, Toast.LENGTH_SHORT).show();   
  •             }   
  •        
  •         }   
  •   
  •     }   
  •   
  •     class MyHandler extends Handler{   
  •   
  •         @Override  
  •         public void handleMessage(Message msg) {   
  •             if (msg.what == 1) {   
  •                 progressBar.setProgress(index);   
  •                 Log.d(TAG, “setProgress index:” + index);   
  •                 if (index >= 99) {   
  •                     String rs = “下载完成”;   
  •                     Toast.makeText(AndroidTest.this, rs, Toast.LENGTH_SHORT).show();   
  •                 }   
  •             }   
  •                
  •             super.handleMessage(msg);   
  •   ¼/div>