Android如何实现文件下载并自动安装apk包!!!

Android程序使用代码的安装和卸载!!!

 

  1 public class MainActivity extends Activity {
  2  
  3         private String currentFilePath = "", currentTempFilePath = "", strURL = "",
  4                         fileEx = "", fileNa = "";
  5         File file2 = new File(Environment.getExternalStorageDirectory()+"");
  6         @SuppressLint("SetJavaScriptEnabled")
  7         @Override
  8         public void onCreate(Bundle savedInstanceState) {
  9                 super.onCreate(savedInstanceState);
 10                 setContentView(R.layout.activity_main);
 11                 fragmentLayout = (View) findViewById(R.id.fragment);
 12                 gotoButton = (Button) findViewById(R.id.goto_button);
 13                 gotoButton.setOnClickListener(gotoListener);
 14         }
 15  
 16         OnClickListener gotoListener = new OnClickListener() {
 17  
 18                 @Override
 19                 public void onClick(View v) {
 20  
 21                         // String webUrl = "http://fancy.189.cn/portal/getclientapk";
 22                         // Uri uri = Uri.parse(webUrl);
 23                         // Intent intent = new Intent(Intent.ACTION_VIEW, uri);
 24                         // startActivity(intent);
 25                         // finish();
 26                         strURL = "http://fancy.189.cn/portal/getclientapk";
 27                         /* 取得欲安装程序名称 */
 28                         fileEx = "telecom_mdesk";
 29                         fileNa = ".apk";
 30                         getFile(strURL);
 31                 }
 32         };
 33  
 34         /* 处理下载URL文件自定义函数 */
 35         private void getFile(final String strPath) {
 36                 try {
 37                         if (strPath.equals(currentFilePath)) {
 38                                 getDataSource(strPath);
 39                         }
 40                         currentFilePath = strPath;
 41                         Runnable r = new Runnable() {
 42                                 public void run() {
 43                                         try {
 44                                                 getDataSource(strPath);
 45                                         } catch (Exception e) {
 46                                                 Log.e("TAG", e.getMessage(), e);
 47                                                 Log.e("TAG", "------>");
 48                                         }
 49                                 }
 50                         };
 51                         new Thread(r).start();
 52                 } catch (Exception e) {
 53                         e.printStackTrace();
 54                 }
 55         }
 56  
 57         /* 取得远程文件 */
 58         private void getDataSource(String strPath) throws Exception {
 59                 // if (!URLUtil.isNetworkUrl(strPath))
 60                 // mTextView01.setText("错误的URL");
 61                 // else
 62                 // {
 63                 /* 取得URL */
 64                 URL myURL = new URL(strPath);
 65                 /* 创建连接 */
 66                 //URLConnection conn = myURL.openConnection();
 67                 HttpURLConnection conn = (HttpURLConnection) myURL.openConnection();
 68                 conn.setRequestMethod("POST");   
 69                 // is = connection.getInputStream();
 70                 //conn.connect();
 71                 /* InputStream 下载文件 */
 72                 InputStream is = conn.getInputStream();
 73                 if (is == null)
 74                         throw new RuntimeException("stream is null");
 75  
 76                 /* 创建临时文件 */
 77                 File myTempFile = File.createTempFile(fileEx, fileNa, file2);
 78                 /* 取得临时文件路径 */
 79                 currentTempFilePath = myTempFile.getAbsolutePath();
 80                 /* 将文件写入暂存盘 */
 81                 FileOutputStream fos = new FileOutputStream(myTempFile);
 82                 byte buf[] = new byte[128];
 83                 do {
 84                         int numread = is.read(buf);
 85                         if (numread <= 0)
 86                                 break;
 87                          
 88                         Log.v("TAG", "下载中---");
 89  
 90                         fos.write(buf, 0, numread);
 91                 } while (true);
 92  
 93                 /* 打开文件进行安装 */
 94                 openFile(myTempFile);
 95                 try {
 96                         is.close();
 97                 } catch (Exception ex) {
 98                         Log.e("TAG", "error: " + ex.getMessage(), ex);
 99                 }
100                 // }
101         }
102  
103         /**
104          * 在手机上打开文件
105          */
106         private void openFile(File f) {
107                 Intent intent = new Intent();
108                 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
109                 intent.setAction(android.content.Intent.ACTION_VIEW);
110  
111                 /* 调用getMIMEType()来取得MimeType */
112                 String type = "application/vnd.android.package-archive";
113                 /* 设置intent的file与MimeType */
114                 intent.setDataAndType(Uri.fromFile(f), type);
115                 startActivity(intent);
116         }
117 }

安装:

1 String str = "/CanavaCancel.apk"; 
2 String fileName = Environment.getExternalStorageDirectory() + str; 
3 Intent intent = new Intent(Intent.ACTION_VIEW); 
4 intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive"); 
5 startActivity(intent);

卸载:

1 Uri packageURI = Uri.parse("package:com.demo.CanavaCancel");   
2 Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);   
3 startActivity(uninstallIntent);
 
Environment拥有一些可以获取环境变量的方法 
package:com.demo.CanavaCancel 这个形式是 package:程序完整的路径 (包名+程序名)。
下载apk程序代码:
 1 protected File downLoadFile(String httpUrl) {
 2                 // TODO Auto-generated method stub
 3                 final String fileName = "updata.apk";
 4                 File tmpFile = new File("/sdcard/update");
 5                 if (!tmpFile.exists()) {
 6                         tmpFile.mkdir();
 7                 }
 8                 final File file = new File("/sdcard/update/" + fileName);
 9 
10                 try {
11                         URL url = new URL(httpUrl);
12                         try {
13                                 HttpURLConnection conn = (HttpURLConnection) url
14                                                 .openConnection();
15                                 InputStream is = conn.getInputStream();
16                                 FileOutputStream fos = new FileOutputStream(file);
17                                 byte[] buf = new byte[256];
18                                 conn.connect();
19                                 double count = 0;
20                                 if (conn.getResponseCode() >= 400) {
21                                         Toast.makeText(Main.this, "连接超时", Toast.LENGTH_SHORT)
22                                                         .show();
23                                 } else {
24                                         while (count <= 100) {
25                                                 if (is != null) {
26                                                         int numRead = is.read(buf);
27                                                         if (numRead <= 0) {
28                                                                 break;
29                                                         } else {
30                                                                 fos.write(buf, 0, numRead);
31                                                         }
32 
33                                                 } else {
34                                                         break;
35                                                 }
36 
37                                         }
38                                 }
39 
40                                 conn.disconnect();
41                                 fos.close();
42                                 is.close();
43                         } catch (IOException e) {
44                                 // TODO Auto-generated catch block
45 
46                                 e.printStackTrace();
47                         }
48                 } catch (MalformedURLException e) {
49                         // TODO Auto-generated catch block
50 
51                         e.printStackTrace();
52                 }
53 
54                 return file;
55         }

 

打开APK程序代码:

 1 private void openFile(File file) {
 2                 // TODO Auto-generated method stub
 3                 Log.e("OpenFile", file.getName());
 4                 Intent intent = new Intent();
 5                 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 6                 intent.setAction(android.content.Intent.ACTION_VIEW);
 7                 intent.setDataAndType(Uri.fromFile(file),
 8                                 "application/vnd.android.package-archive");
 9                 startActivity(intent);
10         }

 

 

posted @ 2014-03-04 15:37  【Winco】  阅读(5894)  评论(0编辑  收藏  举报