`
woaimoliha4
  • 浏览: 12884 次
社区版块
存档分类
最新评论

android下载进度条

 
阅读更多
AsyncTask是个不错的东西,可以使用它来做下载进度条。代码讲解如下:

Java代码 
package com.example.downloadfile;  
 
import java.io.File;  
import java.io.FileOutputStream;  
import java.io.InputStream;  
import java.net.HttpURLConnection;  
import java.net.URL;  
 
import android.app.Activity;  
import android.app.Dialog;  
import android.app.ProgressDialog;  
import android.os.AsyncTask;  
import android.os.Bundle;  
import android.os.Environment;  
import android.util.Log;  
import android.widget.TextView;  
 
public class DownloadFile extends Activity {  
      
    public static final String LOG_TAG = "test";  
      
       private ProgressDialog mProgressDialog;  
    public static final int DIALOG_DOWNLOAD_PROGRESS = 0;  
      
      
    File rootDir = Environment.getExternalStorageDirectory();  
      
    //定义要下载的文件名  
    public String fileName = "test.jpg";  
    public String fileURL = "https://lh4.googleusercontent.com/-HiJOyupc-tQ/TgnDx1_HDzI/AAAAAAAAAWo/DEeOtnRimak/s800/DSC04158.JPG";  
      
    @Override 
    public void onCreate(Bundle savedInstanceState)   
    {  
        super.onCreate(savedInstanceState);  
         
        setContentView(R.layout.main);  
        TextView tv = new TextView(this);  
        tv.setText("Android Download File With Progress Bar");  
      
       //检查下载目录是否存在   
        checkAndCreateDirectory("/mydownloads");  
          
        //执行asynctask  
        new DownloadFileAsync().execute(fileURL);  
    }  
    
      
    class DownloadFileAsync extends AsyncTask<String, String, String> {  
          
        @Override 
        protected void onPreExecute() {  
            super.onPreExecute();  
            showDialog(DIALOG_DOWNLOAD_PROGRESS);  
        }  
 
          
        @Override 
        protected String doInBackground(String... aurl) {  
 
            try {  
                //连接地址  
                URL u = new URL(fileURL);  
                HttpURLConnection c = (HttpURLConnection) u.openConnection();  
                c.setRequestMethod("GET");  
                c.setDoOutput(true);  
                c.connect();  
                  
                //计算文件长度  
                int lenghtOfFile = c.getContentLength();  
                  
                  
                FileOutputStream f = new FileOutputStream(new File(rootDir + "/my_downloads/", fileName));  
            
                InputStream in = c.getInputStream();  
 
               //下载的代码  
                byte[] buffer = new byte[1024];  
                int len1 = 0;  
                long total = 0;  
                  
                while ((len1 = in.read(buffer)) > 0) {  
                    total += len1; //total = total + len1  
                    publishProgress("" + (int)((total*100)/lenghtOfFile));  
                    f.write(buffer, 0, len1);  
                }  
                f.close();  
                  
            } catch (Exception e) {  
                Log.d(LOG_TAG, e.getMessage());  
            }  
              
            return null;  
        }  
          
        protected void onProgressUpdate(String... progress) {  
             Log.d(LOG_TAG,progress[0]);  
             mProgressDialog.setProgress(Integer.parseInt(progress[0]));  
        }  
 
        @Override 
        protected void onPostExecute(String unused) {  
            //dismiss the dialog after the file was downloaded  
            dismissDialog(DIALOG_DOWNLOAD_PROGRESS);  
        }  
    }  
      
      
    public void checkAndCreateDirectory(String dirName){  
        File new_dir = new File( rootDir + dirName );  
        if( !new_dir.exists() ){  
            new_dir.mkdirs();  
        }  
    }  
      
        @Override 
    protected Dialog onCreateDialog(int id) {  
        switch (id) {  
            case DIALOG_DOWNLOAD_PROGRESS: //we set this to 0  
                mProgressDialog = new ProgressDialog(this);  
                mProgressDialog.setMessage("Downloading file...");  
                mProgressDialog.setIndeterminate(false);  
                mProgressDialog.setMax(100);  
                mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);  
                mProgressDialog.setCancelable(true);  
                mProgressDialog.show();  
                return mProgressDialog;  
            default:  
                return null;  
        }  
    }  


package com.example.downloadfile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.TextView;

public class DownloadFile extends Activity {
   
    public static final String LOG_TAG = "test";
   
       private ProgressDialog mProgressDialog;
    public static final int DIALOG_DOWNLOAD_PROGRESS = 0;
   
   
    File rootDir = Environment.getExternalStorageDirectory();
   
    //定义要下载的文件名
    public String fileName = "test.jpg";
    public String fileURL = "https://lh4.googleusercontent.com/-HiJOyupc-tQ/TgnDx1_HDzI/AAAAAAAAAWo/DEeOtnRimak/s800/DSC04158.JPG";
   
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
      
        setContentView(R.layout.main);
        TextView tv = new TextView(this);
        tv.setText("Android Download File With Progress Bar");
   
       //检查下载目录是否存在
        checkAndCreateDirectory("/mydownloads");
       
        //执行asynctask
        new DownloadFileAsync().execute(fileURL);
    }
 
   
    class DownloadFileAsync extends AsyncTask<String, String, String> {
       
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            showDialog(DIALOG_DOWNLOAD_PROGRESS);
        }

       
        @Override
        protected String doInBackground(String... aurl) {

            try {
                //连接地址
                URL u = new URL(fileURL);
                HttpURLConnection c = (HttpURLConnection) u.openConnection();
                c.setRequestMethod("GET");
                c.setDoOutput(true);
                c.connect();
               
                //计算文件长度
                int lenghtOfFile = c.getContentLength();
               
               
                FileOutputStream f = new FileOutputStream(new File(rootDir + "/my_downloads/", fileName));
         
                InputStream in = c.getInputStream();

               //下载的代码
                byte[] buffer = new byte[1024];
                int len1 = 0;
                long total = 0;
               
                while ((len1 = in.read(buffer)) > 0) {
                    total += len1; //total = total + len1
                    publishProgress("" + (int)((total*100)/lenghtOfFile));
                    f.write(buffer, 0, len1);
                }
                f.close();
               
            } catch (Exception e) {
                Log.d(LOG_TAG, e.getMessage());
            }
           
            return null;
        }
       
        protected void onProgressUpdate(String... progress) {
             Log.d(LOG_TAG,progress[0]);
             mProgressDialog.setProgress(Integer.parseInt(progress[0]));
        }

        @Override
        protected void onPostExecute(String unused) {
            //dismiss the dialog after the file was downloaded
            dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
        }
    }
   
   
    public void checkAndCreateDirectory(String dirName){
        File new_dir = new File( rootDir + dirName );
        if( !new_dir.exists() ){
            new_dir.mkdirs();
        }
    }
   
        @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
            case DIALOG_DOWNLOAD_PROGRESS: //we set this to 0
                mProgressDialog = new ProgressDialog(this);
                mProgressDialog.setMessage("Downloading file...");
                mProgressDialog.setIndeterminate(false);
                mProgressDialog.setMax(100);
                mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                mProgressDialog.setCancelable(true);
                mProgressDialog.show();
                return mProgressDialog;
            default:
                return null;
        }
    }
}




配置文件

注意打开文件保存权限
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.example.downloadfile"
     android:versionCode="1"
     android:versionName="1.0">
     
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     
    <uses-sdk android:minSdkVersion="4" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".DownloadFile"
                 android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics