本文所述为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();  }}

读者可以在该实例的基础上进行修改与完善,使之更符合自身项目需求。

更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. android listview custom style 自定义样式
  4. Android中,把XML文件转换成Object对象的方法
  5. [android源码下载索引贴】微信+二维码那都不是事......
  6. android手机客户端上传文件,java servlet服务器端接收并保存到服
  7. android布局文件中的include
  8. android背景选择器selector用法汇总
  9. Android(安卓)无法查看外部依赖jar的源码的问题

随机推荐

  1. 开发遇到的low坑
  2. 安卓课程二十三 ImageView实现适屏和裁剪
  3. Android 技术目标:全栈工程师
  4. android更改暗码
  5. Android保存Serializable数据到本地
  6. Android原生下载管理相关记录
  7. Android > 浅谈获取时间
  8. Android VTS test
  9. Android多渠道打包解决方案(兰贝壳儿)
  10. Android安全检查之网络环境检测