2014-02-24 128 views
0

我想出现 当我用下面的代码停止“com.android.uninstaller.UnistallerActivity”:如何杀死系统卸载活动

public static void killThisPackageIfRunning(final Context context, String packageName){ 
     ActivityManager activityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE); 
     activityManager.killBackgroundProcesses(packageName); 
    } 

,并调用它像:

killThisPackageIfRunning(getApplicationContext(),"com.android.uninstaller.UnistallerActivity"); 
// and 
killThisPackageIfRunning(getApplicationContext(),"com.android.uninstaller"); 

但不起作用!我做错了什么?或者这不是最好的办法吗?

我得到包名无效:com.android.uninstaller.UnistallerActivity错误! 是否有卸载程序活动的另一个名称,或者因为它是一个活动而killBackgroundProcesses不会终止活动?

我知道有另一种方式来杀死应用:

Process.sendSignal(pid, Process.SIGNAL_KILL); 

,但它的gd解决方案停止系统活动?如何知道UnistallerActivity的pid是否已经启动?

我知道这不是一件简单但有一个黑客(超级用户权限的事情要做吗?)

任何指示/思想/讨论,将不胜感激。

+0

是否有正当理由阻止用户卸载的应用程序? – stark

+0

是的,它的工作应用程序安装在工作电话。如果您已经在工作PC上工作,则您不必卸载任何我想要的应用程序! – Smile2Life

+0

然后使用权限。杀死卸载程序可能会导致不愉快, – stark

回答

0

您需要指定packageName来终止进程。

com.android.uninstaller.UnistallerActivity不是有效的packageName,它不存在。 packageName是com.android.packageinstaller,并且Acitivity名称(尽管不需要或不用于杀死应用程序)为com.android.packageinstaller.UninstallerActivity

请注意killBackgroundProcesses只能用于杀死当前不可见的进程。 无法为非系统应用程序终止其他应用程序前台进程。你可以直接打开另一个Activity(例如,一些告诉用户为什么他不能卸载你的应用程序的信息)。

如果您有超级用户访问权限,但是您可以杀死任何应用程序。只要抓住它的进程ID通过ActivityManager.getRunningAppProcesses()循环:

List<ActivityManager.RunningAppProcessInfo> appProcesses = mActivityManager.getRunningAppProcesses(); 
for (ActivityManager.RunningAppProcessInfo process : appProcesses) { 
    if (PACKAGE_INSTALLER.equals(process.processName)) { 
     YourFavouriteRootHelper.call("kill -9 "+process.pid); 
    } 
} 

来源:https://github.com/omnirom/android_packages_apps_PackageInstaller/blob/android-4.4/AndroidManifest.xml

+0

非常感谢您的会谈,但无济于事! – Smile2Life

+0

你是什么意思的“不帮助”?我假设你想杀死卸载程序,如果用户试图使用它 - 这是不可能的(没有根目录),你唯一能做的就是在卸载程序上显示其他内容,这样用户就不能使用它了。 –

+0

我知道这是不可能的,我正在寻找一个黑客做到这一点,即使使用超级用户的权限:) – Smile2Life