Android采用pm命令静默卸载应用

卸载app的方式有多种,可以直接调用android系统的卸载程序,但是这样会调出android卸载提示框,问题就是真的不好看。

所以采用静默卸载的方式,避免弹出系统提示框。

方法一(调用系统卸载程序):

1 //卸载应用
2             Uri packageURI = Uri.parse("package:" + pkgName);
3             Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
4             startActivity(uninstallIntent);

方法二(静默安装):

 1  /**
 2      * 卸载应用入口提示
 3      *
 4      * @param position app在列表中的位置
 5      * @param mData app列表
 6      */
 7     public void startUninstall(int position, List<AppInfoModel> mData) {
 8
 9         //获取应用程序包名
10         String pkg = mData.get(position).packageName;
11         //判断此应用程序是否存在
12         Boolean pkgExist;
13         pkgExist = appExist(mContext,pkg);
14         if (!pkgExist) {
15             Toast.makeText(mContext, "程序未安装", Toast.LENGTH_SHORT).show();
16         } else {
17             //静默卸载
18             Boolean uninstallSuccess = uninstall(pkg);
19             if (uninstallSuccess){
20                 Toast.makeText(mContext, "卸载成功", Toast.LENGTH_SHORT).show();
21             } else {
22                 Toast.makeText(mContext, "卸载失败", Toast.LENGTH_SHORT).show();
23             }
24         }
25
26     }
27
28
29     /**
30      * 静默卸载App
31      *
32      * @param packageName 包名
33      * @return 是否卸载成功
34      */
35     private static boolean uninstall(String packageName) {
36         Process process = null;
37         BufferedReader successResult = null;
38         BufferedReader errorResult = null;
39         StringBuilder successMsg = new StringBuilder();
40         StringBuilder errorMsg = new StringBuilder();
41         try {
42             process = new ProcessBuilder("pm", "uninstall", packageName).start();
43             successResult = new BufferedReader(new InputStreamReader(process.getInputStream()));
44             errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream()));
45             String s;
46             while ((s = successResult.readLine()) != null) {
47                 successMsg.append(s);
48             }
49             while ((s = errorResult.readLine()) != null) {
50                 errorMsg.append(s);
51             }
52         } catch (Exception e) {
53             KLog.d("e = " + e.toString());
54         } finally {
55             try {
56                 if (successResult != null) {
57                     successResult.close();
58                 }
59                 if (errorResult != null) {
60                     errorResult.close();
61                 }
62             } catch (Exception e) {
63                 KLog.d("Exception : " + e.toString());
64             }
65             if (process != null) {
66                 process.destroy();
67             }
68         }
69         //如果含有"success"单词则认为卸载成功
70         return successMsg.toString().equalsIgnoreCase("success");
71     }
72
73     /**
74      * 判断应用是否存在
75      *
76      * @param context       上下文
77      * @param packageName   包名
78      * @return  是否存在
79      */
80     private boolean appExist(Context context, String packageName) {
81         try {
82             List<PackageInfo> packageInfoList = context.getPackageManager().getInstalledPackages(0);
83             for (PackageInfo packageInfo : packageInfoList) {
84                 if (packageInfo.packageName.equalsIgnoreCase(packageName)) {
85                     return true;
86                 }
87             }
88         } catch (Exception e) {
89             KLog.d(e.toString());
90         }
91         return false;
92     }

原文地址:https://www.cnblogs.com/ken9527just/p/11586593.html

时间: 2024-09-28 08:51:59

Android采用pm命令静默卸载应用的相关文章

Android中pm命令用法(转)

usage: pm [list|path|install|uninstall] pm list packages [-f] pm list permission-groups pm list permissions [-g] [-f] [-d] [-u] [GROUP] pm list instrumentation [-f] [TARGET-PACKAGE] pm path PACKAGE pm install [-l] [-r] PATH pm uninstall [-k] PACKAGE

Android下pm 命令详解

Sam在看相关PackageManager代码时,无意中发现Android 下提供一个pm命令,通常放在/system/bin/下.这个命令与Package有关,且非常实用.所以研究之.0. Usage: usage: pm [list|path|install|uninstall] pm list packages [-f] pm list permission-groups pm list permissions [-g] [-f] [-d] [-u] [GROUP] pm list ins

Android下pm命令详解

在看相关PackageManager代码时,无意中发现Android 下提供一个pm命令,通常放在/system/bin/下.这个命令与Package有关,且非常实用.所以研究之. 0. Usage:usage: pm [list|path|install|uninstall] pm list packages [-f] pm list permission-groups pm list permissions [-g] [-f] [-d] [-u] [GROUP] pm list instru

android 权限管理和签名 实现静默卸载

为了实现静默卸载, 学了下android的安全体系,记录如下 最近在做个东西,巧合碰到了sharedUserId的问题,所以收集了一些资料,存存档备份. 安装在设备中的每一个apk文件,Android给每个APK进程分配一个单独的用户空间,其manifest中的userid就是对应一个Linux用户都会被分配到一个属于自己的统一的Linux用户ID,并且为它创建一个沙箱,以防止影响其他应用程序(或者其他应用程序影响它).用户ID 在应用程序安装到设备中时被分配,并且在这个设备中保持它的永久性.

Android静默安装和静默卸载

静默顾名思义就是静静的默默地,静默安装和静默卸载的意思也就是说在后台默默地安装和卸载. 最近的一个app应用分发的项目中app下载的模块,下载完成之后,用户可以通过这个app进行安装,为了提高用户的体验,我就加入了静默安装和卸载功能,然后还加入了使用am命令启动某个Activity. 这个项目中静默的方式实现代码如下: 首先判断是否有root权限,如果有利用静默方式,否则利用意图实现app安装和卸载操作. package com.example.test; import java.io.File

Android apk的安装、卸载、更新升级(通过Eclipse实现静默安装)

一.通过Intent消息机制发送消息,调用系统应用进行,实现apk的安装/卸载 . (1) 调用系统的安装应用,让系统自动进行apk的安装 String fileName = "/data/data/com.zlc.ipanel.operate/FileOperate.apk";  Uri uri = Uri.fromFile(new File(fileName));  Intent intent = new Intent(Intent.ACTION_VIEW);  intent.se

Android静默安装和静默卸载代码

静默顾名思义就是静静的默默地,静默安装和静默卸载的意思也就是说在后台默默地安装和卸载. 最近的一个app应用分发的项目中app下载的模块,下载完成之后,用户可以通过这个app进行安装,为了提高用户的体验,我就加入了静默安装和卸载功能,然后还加入了使用am命令启动某个Activity. 这个项目中静默的方式实现代码如下: 首先判断是否有root权限,如果有利用静默方式,否则利用意图实现app安装和卸载操作. 1 package com.example.test; 2 3 import java.i

Android pm 命令详解

一.pm命令介绍与包名信息查询 1.pm命令介绍 pm工具为包管理(package manager)的简称 可以使用pm工具来执行应用的安装和查询应用宝的信息.系统权限.控制应用 pm工具是Android开发与测试过程中必不可少的工具,shell命令格式如下: pm <command> 2.包名信息查询 shell模式下: pm list packages [options] [FILTER] 打印所有的已经安装的应用的包名,如果设置了文件过滤则值显示包含过滤文字的内容 参数 描述 -f 显示

Android pm命令详解

在看相关PackageManager代码时,无意中发现Android 下提供一个pm命令,通常放在/system/bin/下.这个命令与Package有关,且非常实用.所以研究之. 0. Usage: usage: pm [list|path|install|uninstall] pm list packages [-f] pm list permission-groups pm list permissions [-g] [-f] [-d] [-u] [GROUP] pm list instr