当前位置: 首页 > 编程笔记 >

Android实现下载文件功能的方法

姜玉泽
2023-03-14
本文向大家介绍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(); 
 }
}

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

 类似资料:
  • 本文向大家介绍SpringMVC实现文件下载功能,包括了SpringMVC实现文件下载功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了SpringMVC文件下载的具体代码,供大家参考,具体内容如下 两个案例   1.为登录用户提供下载服务。   2.阻止仅通过输入网址即可获取下载。 文件下载概览   为了将文件发送给浏览器,我们需要在控制器中完成以下操作: 对请求处理方法使用vo

  • 本文向大家介绍JAVA实现下载文件功能的两种方法,包括了JAVA实现下载文件功能的两种方法的使用技巧和注意事项,需要的朋友参考一下 第一种方法: 第二种方法: 以上就是JAVA实现下载文件功能的两种方法的详细内容,更多关于JAVA实现下载文件的资料请关注呐喊教程其它相关文章!

  • 本文向大家介绍python2.7实现FTP文件下载功能,包括了python2.7实现FTP文件下载功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python实现FTP文件下载功能的具体代码,供大家参考,具体内容如下 代码: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍Android编程使用WebView实现文件下载功能的两种方法,包括了Android编程使用WebView实现文件下载功能的两种方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android编程使用WebView实现文件下载功能的两种方法。分享给大家供大家参考,具体如下: 在应用中,通常会使用到文件下载功能,一般我们都是写一个下载操作工具类,在异步任务中执行下载功能。 今

  • 本文向大家介绍Servlet实现代理文件下载功能,包括了Servlet实现代理文件下载功能的使用技巧和注意事项,需要的朋友参考一下 用户向代理服务器发送请求,代理服务器从后端服务器上获取文件,并返回给用户 web.xml: servlet: 参考:一个文件下载的Servlet 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍struts2实现简单文件下载功能,包括了struts2实现简单文件下载功能的使用技巧和注意事项,需要的朋友参考一下 Struts2提供了stream结果类型,该结果类型是专门用于支持文件下载功能的。配置stream类型的结果需要指定以下4个属性。   contentType:指定被下载文件的文件类型   inputName:指定被下载文件的入口输入流   contentDispos