首先判断
如果是系统应用,或者拥有root权限,就调用静默安装
如果两者都不是,就只能通过隐式意图调用系统安装程序安装APK
public static final int install(Context context, String filePath) {
if (PackageUtils.isSystemApplication(context) || ShellUtils.checkRootPermission()) {
return installSilent(context, filePath);
}
return installNormal(context, filePath) ? INSTALL_SUCCEEDED : INSTALL_FAILED_INVALID_URI;
}
通过隐式意图调用系统安装程序安装APK
/**
* install package normal by system intent
* 通过隐式意图调用系统安装程序安装APK
* @param context
* @param filePath file path of package
* @return whether apk exist
*/
public static boolean installNormal(Context context, String filePath) {
Intent i = new Intent(Intent.ACTION_VIEW);
File file = new File(filePath);
if (file == null || !file.exists() || !file.isFile() || file.length() <= 0) {
return false;
}
i.setDataAndType(Uri.parse("file://" + filePath), "application/vnd.android.package-archive");
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
return true;
}
/**
* 安装APK
*
* @param context
* @param filePath
*/
public static void install(Context context, String filePath) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setDataAndType(Uri.fromFile(new File(filePath)), "application/vnd.android.package-archive");
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}