疤痕磨削术价格:远程下载安装apk文件到手机或模拟器

来源:百度文库 编辑:偶看新闻 时间:2024/05/08 16:25:57
测试地址:http://www.dubblogs.cc:8751/Android/Test/Apk/EX04_14.apk
Java代码

  

package cn.com;   

  

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;    

  

/*必须引用java.io与java.net*/  

  

import java.io.File;   

import java.io.FileOutputStream;   

import java.io.InputStream;   

import java.net.URL;   

import java.net.URLConnection;   

  

  

public class InstallUrlApk 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 = "";   

  

  /** Called when the activity is first created. */  

  @Override  

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

  

        System.out.println("***************fileEx =" + fileEx);   

  

        fileNa = strURL.substring(strURL.lastIndexOf("/") + 1, strURL   

            .lastIndexOf("."));   

  

        System.out.println("***************fileNa =" + fileNa);   

  

        //开启一个子线程进行文件的下载   

        getFile(strURL);   

      }   

    });   

  

    mEditText01.setOnClickListener(new EditText.OnClickListener()   

    {   

      @Override  

      public void onClick(View arg0)   

      {   

        // TODO Auto-generated method stub   

        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   

  {   

//如果是一个正确的网址,就返回true   

    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文字状态 */  

  @Override  

  protected void onPause()   

  {   

    mTextView01 = (TextView) findViewById(R.id.myTextView1);   

    mTextView01.setText("下载成功");   

    super.onPause();   

  }   

  

  /* 当Activity处于onResume状态时,删除临时文件 */  

  @Override  

  protected void onResume()   

  {   

    // TODO Auto-generated method stub   

    /* 删除临时文件 */  

    delFile(currentTempFilePath);   

    super.onResume();   

  }   

}  

package cn.com;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; /*必须引用java.io与java.net*/import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.net.URL;import java.net.URLConnection;public class InstallUrlApk 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 = "";  /** Called when the activity is first created. */  @Override  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();        System.out.println("***************fileEx =" + fileEx);        fileNa = strURL.substring(strURL.lastIndexOf("/") + 1, strURL            .lastIndexOf("."));        System.out.println("***************fileNa =" + fileNa);        //开启一个子线程进行文件的下载        getFile(strURL);      }    });    mEditText01.setOnClickListener(new EditText.OnClickListener()    {      @Override      public void onClick(View arg0)      {        // TODO Auto-generated method stub        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  {//如果是一个正确的网址,就返回true    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文字状态 */  @Override  protected void onPause()  {    mTextView01 = (TextView) findViewById(R.id.myTextView1);    mTextView01.setText("下载成功");    super.onPause();  }  /* 当Activity处于onResume状态时,删除临时文件 */  @Override  protected void onResume()  {    // TODO Auto-generated method stub    /* 删除临时文件 */    delFile(currentTempFilePath);    super.onResume();  }}

另外例子中还可以通过
Java代码
  1. System.out.println("conn.getContentLength() =" + conn.getContentLength());  
System.out.println("conn.getContentLength() =" + conn.getContentLength());
获取下载文件的大小,然后来实现PrgressBar的下载进度显示