android AsyncTask做下载进度条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>
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!