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>
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!