Android中使用AsyncTask做下载进度条实例代码

Gamila ·
更新时间:2024-09-21
· 615 次阅读

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 = "http://huoche.7234.cn/images/jb51/sc54t3dlzrb.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>

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

您可能感兴趣的文章:Android 下载文件通知栏显示进度条功能的实例代码Android编程实现显示在标题上的进度条功能【附源码下载】Android实现文件上传和下载倒计时功能的圆形进度条Android中使用AsyncTask实现下载文件动态更新进度条功能android中实现OkHttp下载文件并带进度条android多线程断点下载-带进度条和百分比进度显示效果Android多线程+单线程+断点续传+进度条显示下载功能Android带进度条的下载图片示例(AsyncTask异步任务)Android使用AsyncTask下载图片并显示进度条功能Android编程开发实现带进度条和百分比的多线程下载Android文件下载进度条的实现代码Android实现百分比下载进度条效果



进度条 asynctask Android

需要 登录 后方可回复, 如果你还没有账号请 注册新账号