Welcome

首页 / 移动开发 / Android / Android实现下载文件功能的方法

本文所述为Android实现下载文件功能的完整示例代码,对于学习和研究android编程相信会有一定的帮助,尤其是对Android初学者有一定的借鉴价值。
完整功能代码如下:
package com.test;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.net.URL;import java.net.URLConnection;import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.util.Log;import android.view.View;import android.webkit.URLUtil;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class Main extends Activity {private TextView mTextView01; private EditText mEditText01; private Button mButton01; private static final String TAG = "DOWNLOADAPK";private String currentFilePath = "";private String currentTempFilePath = "";private String strURL=""; private String fileEx=""; private String fileNa="";public void onCreate(Bundle savedInstanceState){ 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(new Button.OnClickListener(){public void onClick(View v) { // 文件会下载至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(new EditText.OnClickListener(){public void onClick(View arg0){ mEditText01.setText(""); mTextView01.setText("远程安装程序(请输入URL)");}}); }/* 处理下载URL文件自定义函数 */ private void getFile(final String strPath) {try{if (strPath.equals(currentFilePath) ){getDataSource(strPath);}currentFilePath = strPath;Runnable r = new Runnable(){ public void run() { try {getDataSource(strPath); } catch (Exception e) {Log.e(TAG, e.getMessage(), e); } }};new Thread(r).start();} catch(Exception e) { e.printStackTrace(); } }/*取得远程文件*/private void getDataSource(String strPath) throws Exception{ if (!URLUtil.isNetworkUrl(strPath)) { mTextView01.setText("错误的URL"); } else { /*取得URL*/URL myURL = new URL(strPath);/*创建连接*/URLConnection conn = myURL.openConnection();conn.connect();/*InputStream 下载文件*/InputStream is = conn.getInputStream();if (is == null) {throw new RuntimeException("stream is null"); } /*创建临时文件*/ File myTempFile = File.createTempFile(fileNa, "."+fileEx);/*取得站存盘案路径*/currentTempFilePath = myTempFile.getAbsolutePath();/*将文件写入暂存盘*/ FileOutputStream fos = new FileOutputStream(myTempFile);byte buf[] = new byte[128];do{ int numread = is.read(buf); if (numread <= 0) { break; } fos.write(buf, 0, numread);}while (true);/*打开文件进行安装*/openFile(myTempFile);try {is.close(); } catch (Exception ex) {Log.e(TAG, "error: " + ex.getMessage(), ex); } } } /* 在手机上打开文件的method */ private void openFile(File f){Intent intent = new Intent();intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setAction(android.content.Intent.ACTION_VIEW);/* 调用getMIMEType()来取得MimeType */String type = getMIMEType(f);/* 设置intent的file与MimeType */intent.setDataAndType(Uri.fromFile(f),type);startActivity(intent);} /* 判断文件MimeType的method */ private String getMIMEType(File f){ String type="";String fName=f.getName();/* 取得扩展名 */String end=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"; }else if(end.equals("3gp")||end.equals("mp4")){type = "video";}else if(end.equals("jpg")||end.equals("gif")||end.equals("png")||end.equals("jpeg")||end.equals("bmp")){type = "image";}else if(end.equals("apk")) { /* android.permission.INSTALL_PACKAGES */ type = "application/vnd.android.package-archive"; } else{type="*";}/*如果无法直接打开,就跳出软件列表给用户选择 */if(end.equals("apk")) { } else { type += "/*"; } return type;}/*自定义删除文件方法*/ private void delFile(String strFileName){ File myFile = new File(strFileName); if(myFile.exists()) { myFile.delete(); }} /*当Activity处于onPause状态时,更改TextView文字状态*/ protected void onPause() {mTextView01 = (TextView)findViewById(R.id.myTextView1);mTextView01.setText("下载成功");super.onPause(); } /*当Activity处于onResume状态时,删除临时文件*/protected void onResume(){ /* 删除临时文件 */ delFile(currentTempFilePath); super.onResume();}}
读者可以在该实例的基础上进行修改与完善,使之更符合自身项目需求。