我试图在出现时停止“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?
我知道这不是一件简单的事情,但是有一个黑客(获得超级用户许可的事情吗?)
任何迹象/想法/讨论都将受到赞赏。
答案 0 :(得分:0)
您需要指定packageName以终止该进程。
com.android.uninstaller.UnistallerActivity
不是有效的packageName,它不存在。 packageName为com.android.packageinstaller
,并且Acitivity名称(虽然不需要或对杀死应用程序有用)是com.android.packageinstaller.UninstallerActivity
。
请注意,killBackgroundProcesses
只能用于杀死当前不可见的进程。
对于非系统应用程序,无法终止其他应用程序前台进程。您可以改为打开另一个Activity(例如,一些告诉用户他无法卸载您应用的信息)。
如果您拥有超级用户访问权限,则可以终止任何应用。只需通过循环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);
}
}