public static int installSilence(Context context, String filePath, boolean isUpdate) {
    File file = new File(filePath);

    if (!file.isFile() || !file.exists()) {
      return 0;
    }
    Uri packageURI = Uri.fromFile(file);
    int installFlags = 0;
    PackageManager pm = context.getPackageManager();
    PackageInfo info = pm.getPackageArchiveInfo(filePath, PackageManager.GET_ACTIVITIES);
    if (info != null) {
      try {
        PackageInfo pi =
            pm.getPackageInfo(info.packageName, PackageManager.GET_UNINSTALLED_PACKAGES);
        if (pi != null) {
          if (isUpdate) {
            installFlags |= ACA.PackageManager.INSTALL_REPLACE_EXISTING;
          } else {
            return ACA.PackageManager.INSTALL_SUCCEEDED;
          }
        }
      } catch (NameNotFoundException e) {
        // the package did't installed, go ahead
        e.printStackTrace();
      }
      PackageInstallObserver obs = new PackageInstallObserver();
      ACA.PackageManager.installPackage(pm, packageURI, obs, installFlags, info.packageName);
      synchronized (obs) {
        while (!obs.finished) {
          try {
            obs.wait();
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
        }
        ;
        return obs.result;
      }
    }
    return 0;
  }
  /**
   * uninstall the Third lock app
   *
   * @param packageName the package name of lock
   * @return the result of delete app
   */
  private static int unInstallSilence(String packageName, Context context) {
    if (TextUtils.isEmpty(packageName)) {
      return 0;
    }
    PackageManager pm = context.getPackageManager();

    PackageDeleteObserver pdo = new PackageDeleteObserver();
    ACA.PackageManager.deletePackage(pm, packageName, pdo, 0);
    synchronized (pdo) {
      while (!pdo.finished) {
        try {
          pdo.wait();
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
      return pdo.result;
      //            if (pdo.result == ACA.PackageManager.DELETE_SUCCEEDED) {
      //                return 1;
      //            }
    }
  }