如何杀死系统卸载程序活动

时间:2014-02-24 00:07:50

标签: android system kill-process

我试图在出现时停止“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");

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

我得到无效的packageName:com.android.uninstaller.UnistallerActivity 错误! 是否存在卸载程序活动的另一个名称,或者因为它是一个活动并且killBackgroundProcesses不会杀死活动?

我知道另一种杀死应用的方法:

Process.sendSignal(pid, Process.SIGNAL_KILL);

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

我知道这不是一件简单的事情,但是有一个黑客(获得超级用户许可的事情吗?)

任何迹象/想法/讨论都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

您需要指定packageName以终止该进程。

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

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

如果您拥有超级用户访问权限,则可以终止任何应用。只需通过循环ActivityManager.getRunningAppProcesses()

获取进程ID
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