2019独角兽企业重金招聘Python工程师标准>>>

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();
    }
}

转载于:https://my.oschina.net/u/614562/blog/228806

Android下载文件相关推荐

  1. Android下载文件(一)下载进度断点续传

    Android下载文件(一)下载进度&断点续传 索引 Android下载文件(一)下载进度&断点续传 Android下载文件(二)单任务多线程并发&断点续传(待续) Andro ...

  2. Android 下载文件获取对应链接文件的名称及扩展名

    Android开发文件下载有时候下载文件的时候需要获取文件的名称及扩展名,但是下载链接不包含文件的扩展名及文件名,需要其他的方案解决,下面就有两个解决的方案. 一.通过HttpURLConnectio ...

  3. android 为什么java文件下载_java – Android:如何在android下载文件?

    我正在尝试从URL下载文件.我有以下代码. package com.example.downloadfile; import java.io.BufferedOutputStream; import ...

  4. 百度 android 下载文件夹在哪里,手机上从百度网盘下载下来的东西在哪个文件夹里?...

    手机上从百度网盘下载下来的东西在哪个文件夹里?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 手机上从百度网盘下载下来的 ...

  5. Android 下载文件并显示进度条

    2019独角兽企业重金招聘Python工程师标准>>> OK,上一篇文章讲了上传文件到服务端,并显示进度条 那么这边文章主要讲下载文件并显示进度条. 由于简单,所以只上传代码.还是需 ...

  6. java android下载文件_Android 下载文件(jsp做的服务器上)下载下来和源文件大小不一...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 public class FileUtils { private String SDPATH; public String getSDPATH() { r ...

  7. Android下载文件,如果文件夹下有同名文件,则重命名规则为a(2)、a(3)的实现

    具体实现如下: private String fileReleaseName;//文件最终名字 private String SD_FOLDER;//文件夹路径/** *传入文件默认名 **/ pri ...

  8. android程序内下载文件,android文件下载代码 android程序 里如何编写下载代码

    android开发文件下载在手机报错 package cc.download; import android.app.Activity;import android.os我比任何人都懂你不会真的陪我到 ...

  9. Android Service下载文件并自定义通知提示下载

    最近要做一个更新sdk,里面用到了service后台下载,自定义通知提示下载进度,下面直接贴上代码. 下面是UpdateUtils.java ,告诉你如何使用 package com.cnziz.up ...

最新文章

  1. LAMP中apache的配置步骤
  2. 25-----BBS论坛
  3. 软件工程2017第二次作业
  4. C#和.NET Framework的关系
  5. keil5安装_keil5,软件安装包及安装教程
  6. mysql 字段排重_MySQL 根据单个、多个字段排重
  7. ffmpeg——vs集成ffmpeg相关开发
  8. 【JVM】JVM-codecache内存区域介绍
  9. 基于SpringBoot+Vue开发的物流仓储管理系统源码
  10. 视觉培训1 学习opencv
  11. 二次开发 uiautomatorviewer
  12. cocos2dx画扇形
  13. 运维人最重要的工具软件 -- VI
  14. 不朽凡人 正文 第四百八十九章 三个条件
  15. 服务器二手硬盘和新硬盘差距,过年换新拒绝被坑 教你辨别二手固态硬盘
  16. C++设计模式——备忘录模式(高屋建瓴)
  17. 震惊!!C++居然可以发出声音!
  18. 一键换肤丨酷雷曼VR全景系统皮肤高燃登场
  19. 穷站长们, 咱们一起来DIY单城市变多城市版。(分享系列教程)
  20. 软件著作权侵权的裁判要点

热门文章

  1. 树形DP+树状数组 HDU 5877 Weak Pair
  2. 记忆化搜索,FatMouse and Cheese
  3. 最近想读的书想做的事
  4. 五大板块(2)—— 指针
  5. 台式计算机机箱都一样吗,别以为组装台式机很简单,机箱选择大有学问
  6. php响应超过三十秒会报错么,如何捕捉致命错误:PHP中超过30秒的最大执行时间...
  7. date js 半年_JavaScript Date对象
  8. jvm指令重排原因?怎么避免?
  9. 什么是类加载器?类加载器有哪些
  10. Qt编译报 undefined vtable问题