Android采用pm命令静默卸载应用
卸载app的方式有多种,可以直接调用android系统的卸载程序,但是这样会调出android卸载提示框,问题就是真的不好看。
所以采用静默卸载的方式,避免弹出系统提示框。
方法一(调用系统卸载程序):
//卸载应用
Uri packageURI = Uri.parse("package:" + pkgName);
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
startActivity(uninstallIntent);
方法二(静默安装):
/**
* 卸载应用入口提示
*
* @param position app在列表中的位置
* @param mData app列表
*/
public void startUninstall(int position, List<AppInfoModel> mData) { //获取应用程序包名
String pkg = mData.get(position).packageName;
//判断此应用程序是否存在
Boolean pkgExist;
pkgExist = appExist(mContext,pkg);
if (!pkgExist) {
Toast.makeText(mContext, "程序未安装", Toast.LENGTH_SHORT).show();
} else {
//静默卸载
Boolean uninstallSuccess = uninstall(pkg);
if (uninstallSuccess){
Toast.makeText(mContext, "卸载成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(mContext, "卸载失败", Toast.LENGTH_SHORT).show();
}
} } /**
* 静默卸载App
*
* @param packageName 包名
* @return 是否卸载成功
*/
private static boolean uninstall(String packageName) {
Process process = null;
BufferedReader successResult = null;
BufferedReader errorResult = null;
StringBuilder successMsg = new StringBuilder();
StringBuilder errorMsg = new StringBuilder();
try {
process = new ProcessBuilder("pm", "uninstall", packageName).start();
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) {
KLog.d("e = " + e.toString());
} finally {
try {
if (successResult != null) {
successResult.close();
}
if (errorResult != null) {
errorResult.close();
}
} catch (Exception e) {
KLog.d("Exception : " + e.toString());
}
if (process != null) {
process.destroy();
}
}
//如果含有"success"单词则认为卸载成功
return successMsg.toString().equalsIgnoreCase("success");
} /**
* 判断应用是否存在
*
* @param context 上下文
* @param packageName 包名
* @return 是否存在
*/
private boolean appExist(Context context, String packageName) {
try {
List<PackageInfo> packageInfoList = context.getPackageManager().getInstalledPackages(0);
for (PackageInfo packageInfo : packageInfoList) {
if (packageInfo.packageName.equalsIgnoreCase(packageName)) {
return true;
}
}
} catch (Exception e) {
KLog.d(e.toString());
}
return false;
}
Android采用pm命令静默卸载应用的更多相关文章
- Android下pm命令详解
在看相关PackageManager代码时,无意中发现Android 下提供一个pm命令,通常放在/system/bin/下.这个命令与Package有关,且非常实用.所以研究之. 0. Usage: ...
- Android下pm 命令详解
Sam在看相关PackageManager代码时,无意中发现Android 下提供一个pm命令,通常放在/system/bin/下.这个命令与Package有关,且非常实用.所以研究之.0. Usag ...
- 使用dbca命令静默卸载数据库
1) help查询dbca的选项 su - oracledbca -help dbca [-silent | -progressOnly | -customCreate] {<comma ...
- Android中pm命令用法(转)
usage: pm [list|path|install|uninstall] pm list packages [-f] pm list permission-groups pm list perm ...
- Android apk的安装、卸载、更新升级(通过Eclipse实现静默安装)
一.通过Intent消息机制发送消息,调用系统应用进行,实现apk的安装/卸载 . (1) 调用系统的安装应用,让系统自动进行apk的安装 String fileName = "/data/ ...
- android 权限管理和签名 实现静默卸载
为了实现静默卸载, 学了下android的安全体系,记录如下 最近在做个东西,巧合碰到了sharedUserId的问题,所以收集了一些资料,存存档备份. 安装在设备中的每一个apk文件,Android ...
- Android静默安装和静默卸载代码
静默顾名思义就是静静的默默地,静默安装和静默卸载的意思也就是说在后台默默地安装和卸载. 最近的一个app应用分发的项目中app下载的模块,下载完成之后,用户可以通过这个app进行安装,为了提高用户的体 ...
- Android pm命令用法
Sam综观有关PackageManager时,无意中发现Android 下提供一个pm命令,通常放在/system/bin/下. 这个命令与Package有关.且很有用.所以研究之. 0. Usage ...
- Android pm 命令详解
一.pm命令介绍与包名信息查询 1.pm命令介绍 pm工具为包管理(package manager)的简称 可以使用pm工具来执行应用的安装和查询应用宝的信息.系统权限.控制应用 pm工具是Andro ...
随机推荐
- FTP服务器上传,下载文件
public class FtpUtil { /** * * @param host FTP服务器地址 * @param port FTP服务器端口 * @param username FTP登录账号 ...
- 帝国cms 遍历某个父栏目下所有的子栏目
[e:loop={"select * from phome_enewsclass where bclassid in (2) order by classid asc",0,24, ...
- replace函数更换表中字段的域名
网站域名更换后,数据库很多链接都是存的绝对路径,这时候需要修改表里字段的路径,使用replace函数更改域名 update 表名 set 字段名 =replace(字段名 ,'旧域名','新域名') ...
- 微信小程序swiper使用网络图片不显示问题
@ wxml代码: <view class="container"> <swiper indicator-dots="true}" autop ...
- python中字符串格式化的意义(化妆)
格式 描述%% 百分号标记 #就是输出一个%%c 字符及其ASCII码%s 字符串%d 有符号整数(十进制)%u 无符号整数(十进制)%o 无符号整数(八进制)%x 无符号整数(十六进制)%X 无符号 ...
- todo 看看堆栈里的东西
类变量,成员变量,静态方法里的变量.参数,成员方法里的变量,参数
- arcgis 地图如何转到supermap平台
场景:客户使用arcmap配置好的地图数据,由于项目需要转换到超图平台.有如下几种思路供参考. 1. 使用arcmap生成地图缓存,supermap-iServer支持发布arcgis的地图缓存以及t ...
- mybaites 入门到精通
这个mybatis教程也不错:http://limingnihao.iteye.com/blog/781671 MyBatis 目录(?)[-] mybatis实战教程mybatis in actio ...
- string::data
const char* data() const noexcept;注:同c_str #include <iostream>#include <string>#include ...
- IPC 进程间通信方式——管道
进程间通信概述 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间 共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到. 通知时间: ...