以编程方式从最近的应用程序中删除应用程序
Posted
技术标签:
【中文标题】以编程方式从最近的应用程序中删除应用程序【英文标题】:Remove app from recent apps programmatically 【发布时间】:2012-11-03 07:56:22 【问题描述】:我知道可以使用 android:excludeFromRecents
在清单中将活动声明为从最近的活动中排除:
http://developer.android.com/guide/topics/manifest/activity-element.html#exclude
但是,这不是我想要的,我想知道是否有办法从最近的应用程序中删除该应用程序以编程方式
【问题讨论】:
Exclude activity from recents menu by code的可能重复 不完全是,因为我希望将整个应用程序从最近的应用程序中排除,我想在任何时候这样做,而不是在启动Activity
您找到解决方案了吗?我正在尝试做同样的事情
我会发布我的解决方案作为答案
【参考方案1】:
是的,通常当您希望在启动 Activity
时拥有特殊属性时,您需要为 Intent
提供特殊标志。在这种情况下FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
。
更新:
如果您需要隐藏当前已经运行的活动,您可以将此标志与 FLAG_ACTIVITY_CLEAR_TOP
结合使用,这会将新 Intent 发送到现有的 Activity
。不过,您必须考虑并尝试尝试当用户在您的堆栈中移动时会发生什么,以及这是否会使您的应用重新出现在最近的应用中。
【讨论】:
【参考方案2】:这可以使用ActivityManager.AppTask
功能来完成(从 API 21 开始)
ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
if(am != null)
List<ActivityManager.AppTask> tasks = am.getAppTasks();
if (tasks != null && tasks.size() > 0)
tasks.get(0).setExcludeFromRecents(true);
【讨论】:
如何在 API 级别低于 21 时使用该方法?【参考方案3】:将这些行添加到您要退出应用程序的 Activity:
@Override
public void finish()
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
super.finishAndRemoveTask();
else
super.finish();
【讨论】:
【参考方案4】:以下是标志android:excludeFromRecents
的定义(我知道你已经看过了):
此活动启动的任务是否应从最近使用的应用程序(“最近的应用程序”)列表中排除。 也就是说,当这个活动是一个新任务的根活动时,这个 属性决定任务是否不应该出现在列表中 最近的应用程序。如果任务应从列表中排除,则为“true”; “假”,如果它应该被包括在内。默认值为“false”。
所以要从最近的应用程序列表中删除应用程序,您可以在应用程序中的第一个活动上设置此标志,因为该活动会为您的应用程序启动任务。如果您的应用程序中有多个任务(大多数应用程序不太可能),那么您需要为所有任务的根活动设置此标志。
【讨论】:
但是如果我想在启动Activity
之后 将应用程序排除在最近的应用程序之外怎么办?【参考方案5】:
当您的活动完成并应关闭时调用此方法,并且应在完成任务的根活动时将任务完全删除。
finishAndRemoveTask();
【讨论】:
谢谢。这对于通过 BackPress 或 SwipeLeft 删除即时应用程序而将其保留在“最近”中非常有用。【参考方案6】:在收到其他答案后,我设法找到了以下解决方法:我有一个 Activity
,我们称之为 XPTO,在清单中声明为
基本上,当我希望应用从最近列表中消失时,我会完成所有其他活动,然后启动 XPTO,这基本上会杀死应用(在其 onResume()
中调用 android.os.Process.killProcess(android.os.Process.myPid());
如果有人有更好的方法,请分享一下
【讨论】:
以上是关于以编程方式从最近的应用程序中删除应用程序的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式从 Android 的默认应用列表中删除应用?