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

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>

更多相关文章

  1. android按行读取文件内容的几个方法
  2. android 文件 修改权限
  3. android 打开不同文件工具类
  4. android取得手机屏幕大小DisplayMetrics的核心代码
  5. Android代码分析
  6. 使用命令行ls命令的Android文件浏览控件,适合于root过的设备,可以
  7. Android日志服务例子,将日志保存在文件中并每天产生一个日志文件
  8. Android源代码在线浏览网站列表

随机推荐

  1. Android(安卓)电话系统rild分析
  2. Android之应用资源的调用
  3. 新手学习linux需了解的内容
  4. 不仅是微软和诺基亚,谁都无法 fork Androi
  5. Android对Linux内核的增强:Low Memory Kil
  6. Android(安卓)应用程序
  7. Android的memory maps
  8. Android 开发视频推荐
  9. Android软件开发之盘点所有Dialog对话框
  10. android:绘图 (android.graphics包)