Android中使用AsyncTask做下载进度条实例代码
androidAsyncTask做下载进度条
AsyncTask是个不错的东西,可以使用它来做下载进度条。代码讲解如下:
packagecom.example.downloadfile;
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.InputStream;
importjava.net.HttpURLConnection;
importjava.net.URL;
importandroid.app.Activity;
importandroid.app.Dialog;
importandroid.app.ProgressDialog;
importandroid.os.AsyncTask;
importandroid.os.Bundle;
importandroid.os.Environment;
importandroid.util.Log;
importandroid.widget.TextView;
publicclassDownloadFileextendsActivity{
publicstaticfinalStringLOG_TAG="test";
privateProgressDialogmProgressDialog;
publicstaticfinalintDIALOG_DOWNLOAD_PROGRESS=0;
FilerootDir=Environment.getExternalStorageDirectory();
//定义要下载的文件名
publicStringfileName="test.jpg";
publicStringfileURL="https://lh4.googleusercontent.com/-HiJOyupc-tQ/TgnDx1_HDzI/AAAAAAAAAWo/DEeOtnRimak/s800/DSC04158.JPG";
@Override
publicvoidonCreate(BundlesavedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextViewtv=newTextView(this);
tv.setText("AndroidDownloadFileWithProgressBar");
//检查下载目录是否存在
checkAndCreateDirectory("/mydownloads");
//执行asynctask
newDownloadFileAsync().execute(fileURL);
}
classDownloadFileAsyncextendsAsyncTask<String,String,String>{
@Override
protectedvoidonPreExecute(){
super.onPreExecute();
showDialog(DIALOG_DOWNLOAD_PROGRESS);
}
@Override
protectedStringdoInBackground(String...aurl){
try{
//连接地址
URLu=newURL(fileURL);
HttpURLConnectionc=(HttpURLConnection)u.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
//计算文件长度
intlenghtOfFile=c.getContentLength();
FileOutputStreamf=newFileOutputStream(newFile(rootDir+"/my_downloads/",fileName));
InputStreamin=c.getInputStream();
//下载的代码
byte[]buffer=newbyte[1024];
intlen1=0;
longtotal=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(Exceptione){
Log.d(LOG_TAG,e.getMessage());
}
returnnull;
}
protectedvoidonProgressUpdate(String...progress){
Log.d(LOG_TAG,progress[0]);
mProgressDialog.setProgress(Integer.parseInt(progress[0]));
}
@Override
protectedvoidonPostExecute(Stringunused){
//dismissthedialogafterthefilewasdownloaded
dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
}
}
publicvoidcheckAndCreateDirectory(StringdirName){
Filenew_dir=newFile(rootDir+dirName);
if(!new_dir.exists()){
new_dir.mkdirs();
}
}
@Override
protectedDialogonCreateDialog(intid){
switch(id){
caseDIALOG_DOWNLOAD_PROGRESS://wesetthisto0
mProgressDialog=newProgressDialog(this);
mProgressDialog.setMessage("Downloadingfile...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.setMax(100);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.setCancelable(true);
mProgressDialog.show();
returnmProgressDialog;
default:
returnnull;
}
}
}
配置文件
注意打开文件保存权限
<?xmlversion="1.0"encoding="utf-8"?> <manifestxmlns:android="http://schemas.android.com/apk/res/android" package="com.example.downloadfile" android:versionCode="1" android:versionName="1.0"> <uses-permissionandroid:name="android.permission.INTERNET"/> <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-sdkandroid:minSdkVersion="4"/> <applicationandroid:icon="@drawable/icon"android:label="@string/app_name"> <activityandroid:name=".DownloadFile" android:label="@string/app_name"> <intent-filter> <actionandroid:name="android.intent.action.MAIN"/> <categoryandroid:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!