拦截android应用卸载的有关问题

拦截android应用卸载的问题

这两三天一直在研究拦截卸载的东西,目的很明显就是让应用后无法卸载!

 

目前我想到的主要实现方向有2个,

1.卸载前直接杀掉卸载进程

2.卸载后后台重新安装

 

详细分析其可行性:

1.卸载前直接杀掉卸载进程

 

看下图,在用户点击卸载按钮时,系统会在Logcat中打印一条信息” START {act=android.intent.action.DELETE dat=package:android.askforun cmp=com.android.packageinstaller/.UninstallerActivity} “,事件”android.intent.action.DELETE “,对象”package:android.askforun“(卸载应用的包)。



拦截android应用卸载的有关问题

利用以上的信息,使activity开机启动并在后台运行一直监听Logcat,当出现上述关键词时立即kill掉系统卸载进程。

 

问题:

如何kill掉系统卸载进程?

 

原本我打算用killBackgroundProcesses("com.android.packageinstaller");在kill掉进程,但是这个方法并没有发挥作用,killBackgroundProcesses无法kill掉系统进程,而且在代码中结束其他进程也有十分多的限制!

具体可以看一下:http://www.cnblogs.com/crazypebble/archive/2011/04/08/2006213.html

 

第一个思路在结束卸载进程中卡死!拦截android应用卸载的有关问题拦截android应用卸载的有关问题

 

2.卸载后后台重新安装


拦截android应用卸载的有关问题

在应用卸载完成的时候,系统的发送广播:android.intent.action.PACKAGE_REMOVED,设置BroadcastReceiver接收器,当接收到我们的应用被卸载时就调用一个activity重新安装应用。

 

问题:

如何安装?--静默安装/后台安装

 

1)

String str = "/xx.apk";
String fileName = Environment.getExternalStorageDirectory() + str;
Intent intent = new Intent(Intent.ACTION_VIEW);
 intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive");
startActivity(intent);

 认框使用类似的方法会弹出用户确认框,必须通过用户确认才能继续,这根本就无法满足需求!

 

2)在代码中使用pm命令安装应用--没有安装权限

 

3)使用隐藏的api安装--没有安装权限

 

上面两个方法,在运行的时候都出错,提示没有intallpackage的权限(即使你在AndroidManifest.xml中已经声明安装权限)。

 

网上唯一说实现静默安装的文章http://hi.baidu.com/6936995/blog/item/eca4436387a80d7b0d33fa31.html,真心看不明

还有一篇文章,实现静默安装的两种方法http://blog.csdn.net/sodino/article/details/6238818,按照博文所示要实现静默安装必须获取机子本身的签名,我认为用代码很难实现获取机子签名并对应用进行重新打包!

 

第二个思路在静默安装中卡死!拦截android应用卸载的有关问题拦截android应用卸载的有关问题

 

以上就是这几天我研究拦截卸载所遇到的问题,希望有人可以继续研究下去!