码迷,mamicode.com
首页 > 移动开发 > 详细

Java代码实现APP普通安装卸载和静默安装卸载

时间:2015-05-06 17:52:08      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:安装   卸载   静默安装   静默卸载   app   

两者差异

  • 执行普通安装、卸载,将会弹出确认安装、卸载的提示框,与在文件管理器中打开APK文件实现安装、卸载相同。
  • 执行静默安装、卸载,正常状态下,前台无任何反应,APP在后台完成安装和卸载。该功能一般也被称为“后台安装”。

普通安装

核心代码:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(
    Uri.fromFile(new File(apkPath)), 
    "application/vnd.android.package-archive"
);
context.startActivity(intent);

普通卸载

核心代码:

Uri packageURI = Uri.parse("package:" + packageName);
Intent intent = new Intent(Intent.ACTION_DELETE, packageURI);
context.startActivity(intent);

上述代码中,packageName是目标APP的包名。

静默安装

核心代码:

private static final String SILENT_INSTALL_CMD = "pm install -r ";
String installCmd = SILENT_INSTALL_CMD + apkPath;// PM指令不支持中文
int result = -1;
DataOutputStream dos = null;
Process process = null;
try {
    process = Runtime.getRuntime().exec("su");
    dos = new DataOutputStream(process.getOutputStream());
    dos.writeBytes(installCmd + "\n");
    dos.flush();
    dos.writeBytes("exit\n");
    dos.flush();
    process.waitFor();
    result = process.exitValue();
} catch (Exception e) {
    e.printStackTrace();
} finally {
    try {
        if(dos != null) {
            dos.close();
        }
        if(process != null){
            process.destroy();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
return result;

静默卸载

核心代码:

// 如果要保留数据,需要加-k参数,但是卸载会不完全
private static final String SILENT_UNINSTALL_CMD = "pm uninstall ";
String uninstallCmd = SILENT_UNINSTALL_CMD + appPackageName;
int result = -1;
DataOutputStream dos = null;
Process process = null;
try {
    process = Runtime.getRuntime().exec("su");
    dos = new DataOutputStream(process.getOutputStream());
    dos.writeBytes(uninstallCmd + "\n");
    dos.flush();
    dos.writeBytes("exit\n");
    dos.flush();
    process.waitFor();
    result = process.exitValue();
} catch (Exception e) {
    e.printStackTrace();
} finally {
    try {
        if(dos != null) {
            dos.close();
        }
        if(process != null){
            process.destroy();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
return result;

上述代码中,appPackageName是目标APP的包名。

更多内容可参考该页面内的installuninstallsilentInstallsilentUninstall这四个方法。

Java代码实现APP普通安装卸载和静默安装卸载

标签:安装   卸载   静默安装   静默卸载   app   

原文地址:http://blog.csdn.net/risingwonderland/article/details/45537313

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!