Android实现应用下载并自动安装apk包

openkk 7年前

安装:

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

卸载:

Uri packageURI = Uri.parse("package:com.demo.CanavaCancel");     Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);     startActivity(uninstallIntent);

Environment拥有一些可以获取环境变量的方法 
package:com.demo.CanavaCancel 这个形式是 package:程序完整的路径 (包名+程序名).

//下载apk程序代码

protected File downLoadFile(String httpUrl) {                  // TODO Auto-generated method stub                  final String fileName = "updata.apk";                  File tmpFile = new File("/sdcard/update");                  if (!tmpFile.exists()) {                          tmpFile.mkdir();                  }                  final File file = new File("/sdcard/update/" + fileName);                    try {                          URL url = new URL(httpUrl);                          try {                                  HttpURLConnection conn = (HttpURLConnection) url                                                  .openConnection();                                  InputStream is = conn.getInputStream();                                  FileOutputStream fos = new FileOutputStream(file);                                  byte[] buf = new byte[256];                                  conn.connect();                                  double count = 0;                                  if (conn.getResponseCode() >= 400) {                                          Toast.makeText(Main.this, "连接超时", Toast.LENGTH_SHORT)                                                          .show();                                  } else {                                          while (count <= 100) {                                                  if (is != null) {                                                          int numRead = is.read(buf);                                                          if (numRead <= 0) {                                                                  break;                                                          } else {                                                                  fos.write(buf, 0, numRead);                                                          }                                                    } else {                                                          break;                                                  }                                            }                                  }                                    conn.disconnect();                                  fos.close();                                  is.close();                          } catch (IOException e) {                                  // TODO Auto-generated catch block                                    e.printStackTrace();                          }                  } catch (MalformedURLException e) {                          // TODO Auto-generated catch block                            e.printStackTrace();                  }                    return file;          }  //打开APK程序代码    private void openFile(File file) {                  // TODO Auto-generated method stub                  Log.e("OpenFile", file.getName());                  Intent intent = new Intent();                  intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                  intent.setAction(android.content.Intent.ACTION_VIEW);                  intent.setDataAndType(Uri.fromFile(file),                                  "application/vnd.android.package-archive");                  startActivity(intent);          }