Android 如何终止系统卸载程序活动

Android 如何终止系统卸载程序活动,android,system,kill-process,Android,System,Kill Process,当出现“com.android.uninstaller.UnistallerActivity”时,我正在尝试停止它 我使用以下代码: public static void killThisPackageIfRunning(final Context context, String packageName){ ActivityManager activityManager = (ActivityManager)context.getSystemService(Context.ACT

当出现“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错误! 卸载程序活动是否有其他名称,或者因为它是一个活动并且
killbackgroundprocesss
不终止活动

我知道还有另一种杀死应用程序的方法:

Process.sendSignal(pid, Process.SIGNAL_KILL);
但停止系统活动是否是一种解决方案?如果启动了UnistallerActivity,如何知道它的pid

我知道这不是一件简单的事情,但是有没有黑客(超级用户允许的事情?)


如果您有任何指示/想法/讨论,我们将不胜感激。

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

com.android.uninstaller.UnistallerActivity
不是有效的packageName,它不存在。packageName是
com.android.packageinstaller
,活动名称(虽然不需要或不适用于杀死应用程序)是
com.android.packageinstaller.UninstallerActivity

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

如果你有超级用户访问权限,你可以关闭任何应用程序。只需通过
ActivityManager.getRunningAppProcesses()
循环获取它的进程id即可:


List

是否有正当理由阻止用户卸载应用程序?是的,其工作应用程序安装在工作电话中。如果你已经在工作PC上工作,我想你不必卸载任何应用程序!然后使用权限。杀死卸载程序可能会导致不愉快,是的,我使用了所需的权限,我知道不愉快的事情,但这是专业应用程序,不供公众使用,如果卸载应用程序,我们会丢失很多有价值的数据,特别是它被许多员工使用!你说“没用”是什么意思?如果用户试图使用卸载程序,我假设你想杀死它-这是不可能的(没有root),你唯一能做的就是在卸载程序上显示其他东西,这样用户就不能使用它。我知道这是不可能的,我正在寻找一种黑客来完成它,甚至使用超级用户权限:)也许你感兴趣?特别是设备管理部分(更多文档:),我添加了一种使用超级用户访问的方法。
List<ActivityManager.RunningAppProcessInfo> appProcesses = mActivityManager.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo process : appProcesses) {
    if (PACKAGE_INSTALLER.equals(process.processName)) {
        YourFavouriteRootHelper.call("kill -9 "+process.pid);
    }
}