EX08_14.java
上传用户:vip_99
上传日期:2021-03-27
资源大小:61159k
文件大小:6k
源码类别:

android开发

开发平台:

Java

  1. package irdc.EX08_14;
  2. import android.app.Activity; 
  3. import android.content.Intent;
  4. import android.net.Uri;
  5. import android.os.Bundle; 
  6. import android.util.Log; 
  7. import android.view.View; 
  8. import android.webkit.URLUtil; 
  9. import android.widget.Button;
  10. import android.widget.EditText;
  11. import android.widget.TextView;
  12. /*必须引用java.io与java.net*/
  13. import java.io.File; 
  14. import java.io.FileOutputStream; 
  15. import java.io.InputStream; 
  16. import java.net.URL; 
  17. import java.net.URLConnection; 
  18. public class EX08_14 extends Activity 
  19.   private TextView mTextView01;
  20.   private EditText mEditText01;
  21.   private Button mButton01;
  22.   private static final String TAG = "DOWNLOADAPK"; 
  23.   private String currentFilePath = ""; 
  24.   private String currentTempFilePath = ""; 
  25.   private String strURL="";
  26.   private String fileEx="";
  27.   private String fileNa="";
  28.   /** Called when the activity is first created. */ 
  29.   @Override 
  30.   public void onCreate(Bundle savedInstanceState) 
  31.   { 
  32.     super.onCreate(savedInstanceState); 
  33.     setContentView(R.layout.main); 
  34.      
  35.     mTextView01 = (TextView)findViewById(R.id.myTextView1);
  36.     mButton01 = (Button)findViewById(R.id.myButton1);
  37.     mEditText01 =(EditText)findViewById(R.id.myEditText1);
  38.  
  39.     mButton01.setOnClickListener(new Button.OnClickListener()
  40.     {
  41.       public void onClick(View v) 
  42.       {
  43.         /* 文件会下载至local端 */ 
  44.         mTextView01.setText("下载中...");
  45.         strURL = mEditText01.getText().toString(); 
  46.         /*取得欲安装程序之文件名称*/
  47.         fileEx = strURL.substring(strURL.lastIndexOf(".")
  48.         +1,strURL.length()).toLowerCase();
  49.         fileNa = strURL.substring(strURL.lastIndexOf("/")
  50.         +1,strURL.lastIndexOf("."));
  51.         getFile(strURL);
  52.        }
  53.      }
  54.     );
  55.     
  56.     mEditText01.setOnClickListener(new EditText.OnClickListener()
  57.     {
  58.       @Override
  59.       public void onClick(View arg0)
  60.       {
  61.         // TODO Auto-generated method stub
  62.         mEditText01.setText("");
  63.         mTextView01.setText("远程安装程序(请输入URL)");
  64.       }
  65.     });
  66.   }
  67.   /* 处理下载URL文件自定义函数 */
  68.   private void getFile(final String strPath)  {
  69.     try
  70.     {
  71.       if (strPath.equals(currentFilePath) )
  72.       { 
  73.         getDataSource(strPath);
  74.       }
  75.       currentFilePath = strPath;
  76.       Runnable r = new Runnable()
  77.       {
  78.         public void run()
  79.         {
  80.           try
  81.           {
  82.             getDataSource(strPath);
  83.           }
  84.           catch (Exception e)
  85.           {
  86.             Log.e(TAG, e.getMessage(), e);
  87.           }
  88.         }
  89.       };
  90.       new Thread(r).start();
  91.     } 
  92.     catch(Exception e) 
  93.     { 
  94.       e.printStackTrace(); 
  95.     }
  96.   } 
  97.   
  98.    /*取得远程文件*/ 
  99.   private void getDataSource(String strPath) throws Exception 
  100.   { 
  101.     if (!URLUtil.isNetworkUrl(strPath)) 
  102.     { 
  103.       mTextView01.setText("错误的URL"); 
  104.     } 
  105.     else 
  106.     { 
  107.       /*取得URL*/
  108.       URL myURL = new URL(strPath);
  109.       /*创建连接*/
  110.       URLConnection conn = myURL.openConnection();
  111.       conn.connect();
  112.       /*InputStream 下载文件*/
  113.       InputStream is = conn.getInputStream();
  114.       if (is == null) 
  115.       { 
  116.         throw new RuntimeException("stream is null"); 
  117.       } 
  118.       /*创建临时文件*/ 
  119.       File myTempFile = File.createTempFile(fileNa, "."+fileEx);
  120.       /*取得站存盘案路径*/
  121.       currentTempFilePath = myTempFile.getAbsolutePath();
  122.       /*将文件写入暂存盘*/ 
  123.       FileOutputStream fos = new FileOutputStream(myTempFile);
  124.       byte buf[] = new byte[128];
  125.       do
  126.       {
  127.         int numread = is.read(buf);
  128.         if (numread <= 0)
  129.         {
  130.           break;
  131.         }
  132.         fos.write(buf, 0, numread);
  133.       }while (true);
  134.       
  135.       /*打开文件进行安装*/
  136.       openFile(myTempFile);
  137.       try 
  138.       { 
  139.         is.close(); 
  140.       } 
  141.       catch (Exception ex) 
  142.       { 
  143.         Log.e(TAG, "error: " + ex.getMessage(), ex); 
  144.       } 
  145.     }
  146.   }
  147.    
  148.   /* 在手机上打开文件的method */
  149.   private void openFile(File f) 
  150.   {
  151.     Intent intent = new Intent();
  152.     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  153.     intent.setAction(android.content.Intent.ACTION_VIEW);
  154.     
  155.     /* 调用getMIMEType()来取得MimeType */
  156.     String type = getMIMEType(f);
  157.     /* 设置intent的file与MimeType */
  158.     intent.setDataAndType(Uri.fromFile(f),type);
  159.     startActivity(intent); 
  160.   }
  161.   /* 判断文件MimeType的method */
  162.   private String getMIMEType(File f) 
  163.   { 
  164.     String type="";
  165.     String fName=f.getName();
  166.     /* 取得扩展名 */
  167.     String end=fName.substring(fName.lastIndexOf(".")
  168.     +1,fName.length()).toLowerCase(); 
  169.     
  170.     /* 依扩展名的类型决定MimeType */
  171.     if(end.equals("m4a")||end.equals("mp3")||end.equals("mid")||
  172.     end.equals("xmf")||end.equals("ogg")||end.equals("wav"))
  173.     {
  174.       type = "audio"; 
  175.     }
  176.     else if(end.equals("3gp")||end.equals("mp4"))
  177.     {
  178.       type = "video";
  179.     }
  180.     else if(end.equals("jpg")||end.equals("gif")||end.equals("png")||
  181.     end.equals("jpeg")||end.equals("bmp"))
  182.     {
  183.       type = "image";
  184.     }
  185.     else if(end.equals("apk")) 
  186.     { 
  187.       /* android.permission.INSTALL_PACKAGES */ 
  188.       type = "application/vnd.android.package-archive"; 
  189.     } 
  190.     else
  191.     {
  192.       type="*";
  193.     }
  194.     /*如果无法直接打开,就跳出软件列表给用户选择 */
  195.     if(end.equals("apk")) 
  196.     { 
  197.     } 
  198.     else 
  199.     { 
  200.       type += "/*";  
  201.     } 
  202.     return type;  
  203.   } 
  204.   /*自定义删除文件方法*/
  205.   private void delFile(String strFileName) 
  206.   { 
  207.     File myFile = new File(strFileName); 
  208.     if(myFile.exists()) 
  209.     { 
  210.       myFile.delete(); 
  211.     } 
  212.   } 
  213.   
  214.   /*当Activity处于onPause状态时,更改TextView文字状态*/
  215.   @Override 
  216.   protected void onPause()
  217.   {
  218.     mTextView01 = (TextView)findViewById(R.id.myTextView1);
  219.     mTextView01.setText("下载成功");
  220.     super.onPause();
  221.   }
  222.   /*当Activity处于onResume状态时,删除临时文件*/
  223.   @Override 
  224.   protected void onResume() 
  225.   { 
  226.     // TODO Auto-generated method stub   
  227.     /* 删除临时文件 */ 
  228.     delFile(currentTempFilePath); 
  229.     super.onResume(); 
  230.   }
  231. }