文档章节

Android下载文件

方毅超
 方毅超
发布于 2014/04/30 13:45
字数 625
阅读 280
收藏 9

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

本文转载自:http://www.codefans.net/articles/69.shtml

共有 人打赏支持
方毅超
粉丝 0
博文 11
码字总数 0
作品 0
揭阳
程序员
私信 提问
Windows下载Android全部源码

下载msysgit,安装 官方下载:http://code.google.com/p/msysgit/downloads/list, 打开Git Bash,执行命令 输入命令,切换到manifest目录 git tag 列出android各个分支版本 下载android-2.2...

SuShine
2015/06/25
0
0
【配置环境】Phonegap+android

我用的是cordova2.8.1,之前用了2.9.1版本的,发现没有那个.jar包,果断换成了2.8.1如果用2.9.1以上,则打成jar包就行 版本的,试了下能用,根据下面的步骤就可以了 http://phonegap.com/inst...

JungleKing
2014/03/07
0
0
制作可独立分发的 Android 模拟器

如果我们编写了一个Android应用程序,想在一台没有Android SDK或者BUILD环境的机器显示给别人看,应该怎么办呢?通常,我们开发Android应用程序的时候,都是使用模拟器来运行程序,要么是SDK...

鉴客
2011/10/17
443
2
Android Chrome 浏览器将支持下载暂停和取消

目前Android版Chrome浏览器并不支持下载暂停和取消功能。根据Android Police报道,Android操作系统内置的下载管理器,无法处理目前Android版Chrome浏览器发起的下载任务,而最新开发版Chrom...

oschina
2016/03/15
2.8K
7
ubuntu环境下android开发平台的搭建

ubuntu环境下android开发平台的搭建 其实在Window下,我已经有过一段android开发经历,只是后来因为学业以及其他原因没有坚持下来。现在转战ubuntu系统,想重拾android开发的相关知识,并且想...

馨缘6009
2012/05/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS配置Tomcat监听80端口,虚拟主机

Tomcat更改默认端口为80 更改的配置文件是: /usr/local/tomcat/conf/server.xml [root@test-a ~]# vim /usr/local/tomcat/conf/server.xml # 找到 Connector port="8080" protocol="HTTP/1......

野雪球
今天
5
0
《稻盛和夫经营学》读后感心得体会3180字范文

《稻盛和夫经营学》读后感心得体会3180字范文: 一代日本经营之圣稻盛和夫凭借刻苦勤奋的精神以及深植于佛教的商业道德准则,成为了“佛系”企业家的代表人物。在《稻盛和夫经营学》“领导人...

原创小博客
今天
3
0
java框架学习日志-5(常见的依赖注入)

依赖注入(dependency injection) 之前提到控制反转(Inversion of Control)也叫依赖注入,它们其实是一个东西,只是看的角度不同,这章详细说一下依赖注入。 依赖——指bean对象创建依赖于...

白话
今天
4
0
红外接收器驱动开发

背景:使用系统的红外遥控软件没有反应,然后以为自己接线错误,反复测试,结果烧坏了一个红外接收器,信号主板没有问题。所以自己开发了一个红外接收器的python驱动。接线参见https://my.os...

mbzhong
今天
2
0
ActiveMQ消息传送机制以及ACK机制详解

AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的。 一. ActiveMQ消息传送机...

watermelon11
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部