Android实现下载文件功能的方法
本文所述为Android实现下载文件功能的完整示例代码,对于学习和研究android编程相信会有一定的帮助,尤其是对Android初学者有一定的借鉴价值。
完整功能代码如下:
packagecom.test; importjava.io.File; importjava.io.FileOutputStream; importjava.io.InputStream; importjava.net.URL; importjava.net.URLConnection; importandroid.app.Activity; importandroid.content.Intent; importandroid.net.Uri; importandroid.os.Bundle; importandroid.util.Log; importandroid.view.View; importandroid.webkit.URLUtil; importandroid.widget.Button; importandroid.widget.EditText; importandroid.widget.TextView; publicclassMainextendsActivity{ privateTextViewmTextView01; privateEditTextmEditText01; privateButtonmButton01; privatestaticfinalStringTAG="DOWNLOADAPK"; privateStringcurrentFilePath=""; privateStringcurrentTempFilePath=""; privateStringstrURL=""; privateStringfileEx=""; privateStringfileNa=""; publicvoidonCreate(BundlesavedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mTextView01=(TextView)findViewById(R.id.myTextView1); mButton01=(Button)findViewById(R.id.myButton1); mEditText01=(EditText)findViewById(R.id.myEditText1); mButton01.setOnClickListener(newButton.OnClickListener() { publicvoidonClick(Viewv) { //文件会下载至local端 mTextView01.setText("下载中..."); strURL=mEditText01.getText().toString(); /*取得欲安装程序之文件名称*/ fileEx=strURL.substring(strURL.lastIndexOf(".") +1,strURL.length()).toLowerCase(); fileNa=strURL.substring(strURL.lastIndexOf("/") +1,strURL.lastIndexOf(".")); getFile(strURL); } } ); mEditText01.setOnClickListener(newEditText.OnClickListener() { publicvoidonClick(Viewarg0){ mEditText01.setText(""); mTextView01.setText("远程安装程序(请输入URL)"); } }); } /*处理下载URL文件自定义函数*/ privatevoidgetFile(finalStringstrPath){ try { if(strPath.equals(currentFilePath)) { getDataSource(strPath); } currentFilePath=strPath; Runnabler=newRunnable() { publicvoidrun() { try { getDataSource(strPath); } catch(Exceptione) { Log.e(TAG,e.getMessage(),e); } } }; newThread(r).start(); } catch(Exceptione) { e.printStackTrace(); } } /*取得远程文件*/ privatevoidgetDataSource(StringstrPath)throwsException { if(!URLUtil.isNetworkUrl(strPath)) { mTextView01.setText("错误的URL"); } else { /*取得URL*/ URLmyURL=newURL(strPath); /*创建连接*/ URLConnectionconn=myURL.openConnection(); conn.connect(); /*InputStream下载文件*/ InputStreamis=conn.getInputStream(); if(is==null) { thrownewRuntimeException("streamisnull"); } /*创建临时文件*/ FilemyTempFile=File.createTempFile(fileNa,"."+fileEx); /*取得站存盘案路径*/ currentTempFilePath=myTempFile.getAbsolutePath(); /*将文件写入暂存盘*/ FileOutputStreamfos=newFileOutputStream(myTempFile); bytebuf[]=newbyte[128]; do { intnumread=is.read(buf); if(numread<=0) { break; } fos.write(buf,0,numread); }while(true); /*打开文件进行安装*/ openFile(myTempFile); try { is.close(); } catch(Exceptionex) { Log.e(TAG,"error:"+ex.getMessage(),ex); } } } /*在手机上打开文件的method*/ privatevoidopenFile(Filef) { Intentintent=newIntent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(android.content.Intent.ACTION_VIEW); /*调用getMIMEType()来取得MimeType*/ Stringtype=getMIMEType(f); /*设置intent的file与MimeType*/ intent.setDataAndType(Uri.fromFile(f),type); startActivity(intent); } /*判断文件MimeType的method*/ privateStringgetMIMEType(Filef) { Stringtype=""; StringfName=f.getName(); /*取得扩展名*/ Stringend=fName.substring(fName.lastIndexOf(".") +1,fName.length()).toLowerCase(); /*依扩展名的类型决定MimeType*/ if(end.equals("m4a")||end.equals("mp3")||end.equals("mid")|| end.equals("xmf")||end.equals("ogg")||end.equals("wav")) { type="audio"; } elseif(end.equals("3gp")||end.equals("mp4")) { type="video"; } elseif(end.equals("jpg")||end.equals("gif")||end.equals("png")|| end.equals("jpeg")||end.equals("bmp")) { type="image"; } elseif(end.equals("apk")) { /*android.permission.INSTALL_PACKAGES*/ type="application/vnd.android.package-archive"; } else { type="*"; } /*如果无法直接打开,就跳出软件列表给用户选择*/ if(end.equals("apk")) { } else { type+="/*"; } returntype; } /*自定义删除文件方法*/ privatevoiddelFile(StringstrFileName) { FilemyFile=newFile(strFileName); if(myFile.exists()) { myFile.delete(); } } /*当Activity处于onPause状态时,更改TextView文字状态*/ protectedvoidonPause() { mTextView01=(TextView)findViewById(R.id.myTextView1); mTextView01.setText("下载成功"); super.onPause(); } /*当Activity处于onResume状态时,删除临时文件*/ protectedvoidonResume() { /*删除临时文件*/ delFile(currentTempFilePath); super.onResume(); } }
读者可以在该实例的基础上进行修改与完善,使之更符合自身项目需求。