一.卸载指定应用包名俩种方式,直接上代码这种是获取root权限实现偷偷卸载别的应用。
//静默卸载
private void uninstallSlient() {
String packageName = "elink.mobile.im";
String cmd = "pm uninstall " + packageName;
Process process = null;
DataOutputStream os = null;
BufferedReader successResult = null;
BufferedReader errorResult = null;
StringBuilder successMsg = null;
StringBuilder errorMsg = null;
try {
//卸载也需要root权限
process = Runtime.getRuntime().exec("su");
os = new DataOutputStream(process.getOutputStream());
os.write(cmd.getBytes());
os.writeBytes("\n");
os.writeBytes("exit\n");
os.flush();
//执行命令
process.waitFor();
//获取返回结果
successMsg = new StringBuilder();
errorMsg = new StringBuilder();
successResult = new BufferedReader(new InputStreamReader(process.getInputStream()));
errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String s;
while ((s = successResult.readLine()) != null) {
successMsg.append(s);
}
while ((s = errorResult.readLine()) != null) {
errorMsg.append(s);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (os != null) {
os.close();
}
if (process != null) {
process.destroy();
}
if (successResult != null) {
successResult.close();
}
if (errorResult != null) {
errorResult.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
二.第二种方式是当没有root权限的情况下手动卸载,直接上代码。
/**
* check and delete the old package app if it exists.
*/
private void checkOldPackage() {
String packageName = "elink.mobile.im";
if (isAvilible(this, packageName)) {
Intent uninstall_intent = new Intent();
uninstall_intent.setAction(Intent.ACTION_DELETE);
uninstall_intent.setData(Uri.parse("package:" + packageName));
startActivity(uninstall_intent);
}
}
private boolean isAvilible(Context cxt, String packagename) {
final PackageManager packageManager = cxt.getPackageManager();
// 获取所有已安装程序的包信息
List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);
for (int i = 0; i < pinfo.size(); i++) {
// 循环判断是否存在指定包名
if (pinfo.get(i).packageName.equalsIgnoreCase(packagename)) {
return true;
}
}
return false;
}